嗯,我在发布之前做了一些研究,但我找不到正确的解决方案。
这是我的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)
答案 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
)