2011-11-10 16 views
1

複数のテーブルを選択して複数の行を同じ列からジョインするにはどうすればよいですか?SQL - 複数のテーブルを選択し、同じ列から複数の行を結合するには?

painting.id_group,およびpainting.id_locationを返しません。 このSQLスニペットの構文が間違っていると確信しています。

SELECT painting.id, painting.order, painting_en.url, id_portfolio.en 
FROM painting 
LEFT JOIN painting_en 
USING (id) 
LEFT JOIN id_portfolio ON id_portfolio.id = painting.id_group 
AND id_portfolio.id = painting.id_type 
AND id_portfolio.id = painting.id_location 
WHERE painting_en.url='2011-name3' 
LIMIT 1 

更新: それはShowing rows 0 - 0 (1 total, Query took 0.0004 sec)を示しています。

id  | order | url  |en 
----------+-------+------------+----- 
09518709 | 4  | 2011-name3 | NULL 

が、私は返す必要があります:

AND id_portfolio.id = painting.id_type 
AND id_portfolio.id = painting.id_location 

を除去した後、それを返し

id  | order | url  | group | type   | location 
----------+-------+------------+---------+---------------+--------- 
09518709 | 4  | 2011-name3 | realism | oil on canvas | US 
+0

あなたは何ですかそれを返さないという意味ですか?グリッドには1列しか返されませんか? –

+0

質問をSQL結果と期待される結果で更新しました。 – Binyamin

答えて

1

あなたが同じテーブルに参加することができ、複数回あなただけの別の別名

を与える必要が
SELECT painting.id, 
     painting.order, 
     painting_en.url, 
     `group`.en AS `group`, 
     TYPE.en AS type, 
     location.en AS location 
FROM painting 
     LEFT JOIN painting_en 
     USING (id) 
     LEFT JOIN id_portfolio `group` 
     ON `group`.id = painting.id_group 
     LEFT JOIN id_portfolio TYPE 
     ON TYPE.id = painting.id_type 
     LEFT JOIN id_portfolio location 
     ON location.id = painting.id_location 
WHERE painting_en.url = '2011-name3' 
LIMIT 1 
+0

MySQLはエラーを返します。*#1054 - SELECT 'painting.id、painting.order、painting_en.url、id_portfolio.en'の 'フィールドリスト'に未知の列 'id_portfolio.en'があります 'group'、id_portfolio.en AS 'type '、(ID)を用い をpainting_en JOIN LEFTをペイントからの位置 AS id_portfolio.en LEFT JOIN id_portfolio 'id_portfolio.id = painting.id_type ONタイプ '' id_portfolioをJOIN id_portfolio.id = painting.id_group LEFT ON' 基LEFT JOIN id_portfolio location ON id_portfolio.id = painting.id_location WHERE painting_en.url = '2011-name3' LIMIT 1' – Binyamin

+0

これは、実際のテーブル名ではなくSELECT句でテーブルエイリアスを使用する必要があるためです。 –

+0

SQLは必須ですうまく動作している。 * 1054 - 未知の列 'id_portfolio.en'は 'field list' *の中でdbの列が抜けています。これは修正されました。また、より良いパフォーマンスのために、このような必要がない場合は、 'LEFT'と' RIGHT'を使用しないでください。 – Binyamin

関連する問題