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
;

関係は次のとおりです。ユーザーには多くの写真があり、写真は1人のユーザーに属しています。ユーザーには多くの推測があり、推測は1つの画像に属します。トリッキーな部分は、ユーザーが同じ画像に対して1つの推測しか許可されていないことです。

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 に答える