0

現在、MySQL の結合に苦労しています。

users、gifts、users_gifts の 3 つのテーブルがあります。

- Users
    - id
    - username
    - email
    - password

- Gifts
    - id
    - gift
    - value

- users_gifts
    - uid
    - gift_id

すべてのギフトを返品したいのですが、ユーザーが既に送信したギフトは含まれていません。したがって、利用可能なギフトが次の場合:

card
heart
necklace
perfume

ユーザーがすでにハートを送信している場合、返されるギフトは次のとおりです。

card
necklace
perfume

次の結合を試みましたが、何らかの理由で目的の効果が得られません。

SELECT *
FROM   gifts
JOIN   users_gifts
ON     gifts.id = user_gifts.gift_id
WHERE  users_gifts.uid != 3

... 現在のユーザーのユーザー ID が 3 であると仮定します。

ここで何か不足していますか、それとも SQL にエラーがありますか?

4

4 に答える 4

4

あなたのクエリは #3 以外のユーザーを探しています。

代わりに、user=3 の users_gifts を調べる必要があります。

ただし、そのサブクエリに存在するギフトは除外したいと考えています。

SELECT * 
FROM   gifts 
WHERE NOT EXISTS
  (SELECT 1 
   FROM   users_gifts 
   WHERE  users_gifts.uid = 3
   AND    user_gifts.gift_id = gifts.id
  )
于 2013-10-14T20:52:18.450 に答える
0
SELECT *
FROM   gifts
WHERE  gifts.id NOT IN (SELECT gift_id
                        FROM   user_gifts
                        WHERE  uid = 3);
于 2013-10-14T21:09:22.220 に答える