我使用像这样的SQL查询来获得我需要的一些结果:
SELECT
*
FROM
pictures p
WHERE
p.id NOT IN
(
SELECT
picture_id
FROM
guesses g
WHERE
g.user_id = XXX
)
AND
p.user_id != XXX
;
关系如下:用户有很多图片,图片属于一个用户。用户有许多猜测,猜测属于一张图片。棘手的部分是用户只允许猜测同一张图片。
XXX = $ user_id
我想有一种方法可以使用左连接重写这个子选择,但我无法使其正常工作。
有人可以帮忙吗?
安雅
答案 0 :(得分:2)
因为它是NOT IN
条件,所以您应该使用LEFT OUTER JOIN
。这是您的查询的左外连接的直接转换:
SELECT
distinct p.*
FROM
pictures p
LEFT OUTER JOIN
guesses g ON g.picture_id = p.id and g.user_id = XXX
WHERE
p.user_id != XXX
and g.user_id is null
;
答案 1 :(得分:0)
好的,我们走了。我猜这是正确的答案:
SELECT DISTINCT
p.*
FROM
pictures p
LEFT OUTER JOIN
guesses g
ON
g.picture_id = p.id and g.user_id = 1
WHERE
g.user_id is null
and p.user_id != 1
;