アバロン:
申し訳ありませんが、悪いタイトルのために私は言葉これにかどうかはわかりません。基本的に私は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