特定の値に一つの属性を制限しながら、どのように3つのテーブルをまたいで参加できますか?

アバロン:

申し訳ありませんが、悪いタイトルのために私は言葉これにかどうかはわかりません。基本的に私は4つのテーブルを持っています:

  • CheckedOutItems
  • ゲーム
  • 映画

CheckedOutItemsはちょうどITEMIDと得意先が含まれているリンクテーブルです。他の3つのテーブルはITEMID +それらについての情報の束を持っています。私は、ユーザーに対応するすべての項目についての情報を取得したいです。たとえば、ユーザ123は、「チェックアウト中の本や映画を持って、私はその本と映画の項目の情報を取得したいです。

私はそれがこのようなものになるだろうと思ったが、それは動作していません。

SELECT * 
FROM CheckedOutItems
JOIN Book ON CheckedOutItems.itemID = Book.itemID
JOIN Game ON CheckedOutItems.itemID = Game.itemID
JOIN Movie ON CheckedOutItems.itemID = Movie.itemID
WHERE CheckedOutItems.customerID = 123
明菜:

バリアント1(OPのコードを固定し、私はそれを掛ける参加することにより、特に悪い変種、だと思います)。

SELECT * 
FROM CheckedOutItems
LEFT JOIN Book ON CheckedOutItems.itemID=Book.itemID 
LEFT JOIN Game ON CheckedOutItems.itemID=Game.itemID 
LEFT JOIN Movie ON CheckedOutItems.itemID=Movie.itemID
WHERE CheckedOutItems.customerID = 123

バリアント2(項目のテーブル構造は同じである必要があります - あるいは、彼らが一致する空のフィールドを追加することで同期する必要があります):

    SELECT *, 'Book' item_type
    FROM CheckedOutItems
    JOIN Book ON CheckedOutItems.itemID=Book.itemID 
    WHERE CheckedOutItems.customerID = 123
UNION ALL
    SELECT *, 'Game' item_type
    FROM CheckedOutItems
    JOIN Game ON CheckedOutItems.itemID=Game.itemID 
    WHERE CheckedOutItems.customerID = 123
UNION ALL
    SELECT *, 'Movie' item_type
    FROM CheckedOutItems
    JOIN Movie ON CheckedOutItems.itemID=Movie.itemID
    WHERE CheckedOutItems.customerID = 123

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=21553&siteId=1