SQL查询来从三个表基于多个条件

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条件是否适用于给定条件?请对我的回答给出您的意见。谢谢!

+0

你的答案是没有语法正确。 –

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) 
+0

它取决于正在使用的数据和数据库平台,但NOT EXISTS方法可以比NOT IN执行得更好。对于SQL Server,请参阅此答案https://stackoverflow.com/questions/173041/not-in-vs-not-exists – Nathan

+0

哪种解决方案更快 - 如果根本不同 - 很大程度上取决于数据的分布和两个表的索引。上次我在Oracle上看到这种情况时,优化器总是为这两种变体提供相同的执行计划。 – fhossfel

+0

*重要提示:*如果TABLE_C.ID2中没有NULL值,我的解决方案仅与IngoB等效。我认为这是一个PK列,因此不会有NULL值,但如果不是这样的话,Ingo的解决方案是正确的。 – fhossfel