在Where子句中选择

时间:2017-03-26 19:15:37

标签: sql sql-server

嗯,我在发布之前做了一些研究,但我找不到正确的解决方案。

这是我的SQL,我希望通过加入或任何其他方式提高性能并删除select子句。

catch是Table1是第一个要连接的表,它是Where子句中的同一个表。我不确定我是做对还是错。我想知道是否有任何其他有效的方法来获得相同的结果

SELECT T3.Id, T3.Name 
FROM dbo.Table1 T1 
JOIN dbo.Table2 T2 ON T1.Id = T2.Id
JOIN dbo.Table3 T3 ON T2.Name = T3.Name
WHERE T1.fId = (SELECT fId FROM dbo.Table1 WHERE Id = 1)

3 个答案:

答案 0 :(得分:2)

您可以通过简单的连接来完成此操作:

SELECT T3.Id, T3.Name 
FROM dbo.Table1 T1 
inner JOIN dbo.Table2 T2 ON T1.Id = T2.Id
inner JOIN dbo.Table3 T3 ON T2.Name = T3.Name
inner join dbo.Table1 T4 on T4.fId  = T1.fId and T4.Id= 1

答案 1 :(得分:0)

因为您在子查询中使用具有固定值的WHERE子句,所以您可以简单地用所使用的值替换整个查询

SELECT T3.Id, T3.Name FROM dbo.Table1 T1 
JOIN dbo.Table2 T2 ON T1.Id = T2.Id
JOIN dbo.Table3 T3 ON T2.Name = T3.Name
WHERE T1.Id = 1

答案 2 :(得分:0)

看看你是否只想输出T3表,然后使用“Exists”子句

SELECT T3.Id, T3.Name 
FROM dbo.Table3 T3
where exists(
select t2.id from  dbo.Table2 T2 
inner join dbo.Table1 T1 on T1.Id = T2.Id
where T2.Name = T3.Name
and t1. Id = 1
)