別のテーブルにリンクする複数のレコードを持つことができる2つのテーブルがありますが、mySQLで行を結合したくありません。例:
- test_mainには、フィールドmainID、field1が含まれています。
- test_vegには、野菜の名前が付いたレコードが含まれており、ID=1のtest_mainのレコードにリンクされています。
- test_fruitには、それぞれフルーツの名前を持つ2つのレコードが含まれており、どちらもID=1のtest_mainのレコードにリンクされています。
この例では、test_mainにリンクする3つのレコード(1つはtest_veg、2つはtest_fruit)があります。これらの3つの行を取得して、次のような結果を取得したいと思います。
field1 vegName fruitName
------------------- ------- ---------
stuff in main table cabbage NULL
stuff in main table NULL apple
stuff in main table NULL pear
また、test_vegまたはtest_fruitレコードがリンクされていないtest_mainのレコードが必要です。
これはとても単純に思えますが、私はそれを機能させることができません。何か案は?
テーブルが2つしかない場合(たとえば、test_mainとtest_veg)、左結合が機能します。3つのテーブルでは、2つの左結合は2つの行のみを返します。
SELECT test_main.field1, test_veg.vegName, test_fruit.fruitName
FROM test_main
LEFT JOIN test_veg ON test_veg.mainID = test_main.mainID
LEFT JOIN test_fruit ON test_fruit.mainID = test_main.mainID
WHERE test_main.mainID=1
field1 vegName fruitName
------------------- ------- ---------
stuff in main table cabbage apple
stuff in main table cabbage pear
NB私はmySQL3で立ち往生しています。これは、WHERE内のSELECTやUNIONのような派手なものがないことを意味します。