SQL查询来从三个表基于多个条件
想象三个数据表A,B和C A和B共享共同的可变ID1提取数据。 B和C共享一个公共变量ID2。写一个伪查询来得到这个结果:从表B中选择一切,在表A和B中都有匹配的记录,但在表C中没有匹配记录。SQL查询来从三个表基于多个条件
我的答案版本在下面(但我不确定它是否正确):
Select *
From table_b
Left Join table_a
On table_b.ID1 = table_a.ID1
Where table_b.ID2 NOT IN table_c.ID2
我非常怀疑Where条件是否适用于给定条件?请对我的回答给出您的意见。谢谢!
Select *
From table_b
Left Join table_a On table_b.ID1 = table_a.ID1
Where not exists (select * from table_c where table_c.ID2 = table_b.ID2)
类似IngoB的解决方案,但稍微更可读的(恕我直言)
SELECT *
FROM table_b
LEFT OUTER JOIN table_a USING (id1)
WHERE id2 NOT IN (SELECT id2 FROM table_c)
它取决于正在使用的数据和数据库平台,但NOT EXISTS方法可以比NOT IN执行得更好。对于SQL Server,请参阅此答案https://stackoverflow.com/questions/173041/not-in-vs-not-exists – Nathan
哪种解决方案更快 - 如果根本不同 - 很大程度上取决于数据的分布和两个表的索引。上次我在Oracle上看到这种情况时,优化器总是为这两种变体提供相同的执行计划。 – fhossfel
*重要提示:*如果TABLE_C.ID2中没有NULL值,我的解决方案仅与IngoB等效。我认为这是一个PK列,因此不会有NULL值,但如果不是这样的话,Ingo的解决方案是正确的。 – fhossfel
你的答案是没有语法正确。 –