SELECT table1.*
FROM table1
LEFT OUTER JOIN
table2
ON table1.id = table2.did
AND table2.code in (1,2,3)
WHERE table2.did is NULL
0
SELECT * FROM table1 t1
LEFT JOIN table2 t2 ON t1.id = t2.did
7
您可以更清楚地询问您的问题 . 需要注意您的自然语言以及SQL . 我可能没有理解你的问题 . 请注意“你的意思是什么”如果table2中的代码值都不等于某些值集(比如说1,2和3),我想选择table1中的值._". Do you mean "表1中的行"? And instead of "等于某些集合" do you mean "在某些集合中找到“?
如果您有一对多关系中的两个表,例如作曲家和作品:
COMPOSERS
composerid
composername
DOB
WORKS
workid
workname
composerid
datecomposed
worktype (e.g. sonata, string quartet, quintet, symphony)
并且你想要找到所有非奏鸣曲或五重奏的作曲家的作品,你会这样做:
select composer.composername, works.workname, worktype
from COMPOSERS inner join WORKS
on COMPOSERS.composerid = WORKS.composerid
WHERE worktype not IN ('sonata','quintet')
3 回答
这被称为antijoin .
最简单的实现是:
或者,使用外部联接(我不是100%肯定这会起作用,因为我总是使用NOT EXIST语法来反对连接):
您可以更清楚地询问您的问题 . 需要注意您的自然语言以及SQL . 我可能没有理解你的问题 . 请注意“你的意思是什么”如果table2中的代码值都不等于某些值集(比如说1,2和3),我想选择table1中的值._". Do you mean "表1中的行"? And instead of "等于某些集合" do you mean "在某些集合中找到“?
如果您有一对多关系中的两个表,例如作曲家和作品:
并且你想要找到所有非奏鸣曲或五重奏的作曲家的作品,你会这样做:
IF工作类型允许空值,如果您希望在没有输入工作类型的情况下工作,则必须在where子句中添加“或worktype为null” .