如何使用连接编写MySQL NOT IN查询?

时间:2012-12-13 13:52:46

标签: mysql

我使用像这样的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

我想有一种方法可以使用左连接重写这​​个子选择,但我无法使其正常工作。

有人可以帮忙吗?

安雅

2 个答案:

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