我想要选择用户尚未拥有的所有图像.
我有三个表:user,image,和user_image:
LEFT JOIN/IS NULL SELECT DISTINCT
i.data
FROM IMAGE i
JOIN USER_IMAGE ui ON ui.image_id = i.id
LEFT JOIN USER u ON u.id = ui.user_id
AND u.user = ?
WHERE u.id IS NULL
Run Code Online (Sandbox Code Playgroud)
NOT INSELECT DISTINCT
i.data
FROM IMAGE i
JOIN USER_IMAGE ui ON ui.image_id = i.id
WHERE ui.user_id NOT IN (SELECT u.id
FROM USER u
WHERE u.user = ?)
Run Code Online (Sandbox Code Playgroud)
NOT EXISTSSELECT DISTINCT
i.data
FROM IMAGE i
JOIN USER_IMAGE ui ON ui.image_id = i.id
WHERE NOT EXISTS(SELECT NULL
FROM USER u
WHERE u.id = ui.user_id
AND u.user = ?)
Run Code Online (Sandbox Code Playgroud)
的LEFT JOIN/IS NULL和NOT IN提供相当的性能-的NOT EXISTS是〜30%的效率低. 有关详细信息,请参阅本.
| 归档时间: |
|
| 查看次数: |
1459 次 |
| 最近记录: |