MySQL获取关系表中不存在的行

时间:2017-03-19 02:56:10

标签: mysql sql join many-to-many

练习 - >金融家(多对多)

练习 - > 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会这样做,首先选择实践,但它会返回所有实践。

2 个答案:

答案 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;