3

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

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

任何人都可以帮忙吗?

安雅

4

2 回答 2

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
;
于 2012-12-13T13:57:41.717 回答
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
;
于 2012-12-13T15:04:15.747 回答