如何改进此查询

Kry*_*ian 0 t-sql sql-server-2008

我在我的一个PHP应用程序中使用了这个查询:

SELECT DictSchemeName.schemeName, DictTableName.tableName 
FROM DictSchemeName, DictTableName 
WHERE DictSchemeName.Id = (SELECT  schemeName 
                           FROM ServiceSublayer 
                           WHERE sId = 3
                            AND ServiceId = (SELECT Id 
                                               FROM Service 
                                               WHERE applicationId = 'prga'))
  AND DictTableName.Id = (SELECT tableName
                          FROM ServiceSublayer
                          WHERE sId = 3 
                            AND ServiceId =(SELECT Id 
                                            FROM Service 
                                            WHERE applicationId = 'prga'));
Run Code Online (Sandbox Code Playgroud)

正如你所看到的那样,我将两次几乎相同的查询加倍(DictSchemeName和DictTableName),我开始学习SQL,如果有人能帮助我,我会很高兴.

我正在使用MS SQL SERVER 2008

Tar*_*ryn 6

你应该能够加入表格:

select ds.schemeName,
  dt.tableName
from
(
  select schemeName, tableName
  from ServiceSublayer
  where sId = 3
    and ServiceId = (SELECT Id 
                     FROM Service 
                     WHERE applicationId = 'prga')
) s
inner join DictSchemeName ds
  on s.schemeName = ds.id
inner join DictTableName dt
  on s.tableName = dt.id;
Run Code Online (Sandbox Code Playgroud)

甚至更进一步:

select ds.schemeName,
  dt.tableName
from ServiceSublayer ss
inner join Service s
  on ss.serviceId = s.id
inner join DictSchemeName ds
  on ss.schemeName = ds.id
inner join DictTableName dt
  on ss.tableName = dt.id
where ss.sId = 3
 and s.applicationId = 'prga';
Run Code Online (Sandbox Code Playgroud)