0

以下の 2 つのクエリを 1 つに結合できると確信していますが、その方法がわかりません。

すべてのユーザーの first_name 列と email 列を取得したいのですが、関連する pet_type と pet_breed も最初の広告レコードから取得したいと考えています。広告レコードには、breed_id のみが含まれ、pet_breeds テーブルにリンクされて、pet_type と pet_breed が取得されます。結果でbreed_idを返す必要はありません。pet_typeとpet_breedだけです。ユーザーに関連付けられた広告レコードが存在しない場合、pet_breed と pet_type がテキスト「なし」を返すようにします。

SELECT users.first_name, users.email,
      (SELECT adverts.breed_id AS breed 
      FROM adverts 
      WHERE adverts.user_id = users.user_id 
      LIMIT 1)
FROM users

2 番目のクエリ

SELECT pet_type, pet_breed
FROM pet_breeds
WHERE breed_id = breed
4

1 に答える 1

1

LEFT JOINCOALESCE(の代わりに表示NONENULLする場合)

SELECT  a.first_name, a.email,
        COALESCE(c.pet_type, 'NONE') pet_type,
        COALESCE(c.pet_breed, 'NONE') pet_breed
FROM    users a
        LEFT JOIN adverts b
            ON a.user_ID = b.user_ID
        LEFT JOIN pet_breeds c
            ON b.breed_ID = c.breed_ID

更新 1

SELECT  a.first_name, a.email,
        COALESCE(c.pet_type, 'NONE') pet_type,
        COALESCE(c.pet_breed, 'NONE') pet_breed
FROM    users a
        LEFT JOIN 
        (
            SELECT user_ID, max(breed_ID) breed_ID
            FROM adverts
            GROUP BY user_ID
        ) b ON a.user_ID = b.user_ID
        LEFT JOIN pet_breeds c
            ON b.breed_ID = c.breed_ID
于 2012-11-22T14:50:39.597 に答える