练习 - >金融家(多对多)
练习 - > Financier_Practice(多对一)。
Practice
practice_id
practice_name
Financier
financier_id
financier_name
Financier_Practice
financier_id
practice_id
enabled
我在financier_practice
中有一些记录,现在我希望获得尚未分配给特定金融家的所有practices
。
例如,如果我有3个实践,并且有一个分配给financier
,则返回另外两个为同一个金融家。
我该怎么办?
我认为LEFT JOIN
会这样做,首先选择实践,但它会返回所有实践。
答案 0 :(得分:1)
SELECT p.*
FROM Practice p
LEFT JOIN Financier_Practice fp
ON p.practice_id = fp.practice_id
WHERE fp.practice_id IS NULL AND
fp.financier_id = 3 -- replace 3 with whatever value you want
答案 1 :(得分:0)
您可以使用cross join
生成所有行,然后使用某种方法删除存在的行。以下使用left join
:
select f.financier_id, p.practice_id
from financier f cross join
practice p left join
financier_practice fp
on fp.financier_id = f.financier_id and fp.practie_id = p.practice_id
where fp.financier_id is null;