2017-05-14 22 views
0

私はたくさんのテーブルを持っていて、結果が重複したり重複したりすることなく、複数のジョインをすべてのテーブルに残しました。私のテーブルの1つは複数の値を持ち、重複した同じIDを受け入れることができます。私がすべてのテーブルを結合したままにすると、結果は正しく表示されますが、その特定の列は複数値テーブルの値の1つを示します。複数の左ジョインと複数の値を持つWHERE句

現在、私はマルチ値テーブルのフィルタリングを行っていますが、マルチ値テーブルの値のうちの1つだけを出力するため、結果は不確実です。

メニュー表

id cuisine_id 
1 1 

CuisineMenu表(マルチ値/重複メニューのidを受け入れる)

cuisine_id menu_id 
1   1 
2   2 (Ignore) 
3   1 

クエリ

SELECT * FROM menu 
LEFT JOIN (
     SELECT *  
     FROM cuisinemenu  
     GROUP BY menu_id 
) cuisinemenu ON cuisinemenu.menu_id = menu.id 
WHERE (cuisine_id = '3') 

Empty 

は結果(WITH句)期待はどこでWhere句

id cuisine_id 
1 1 

ずに出力

id cuisine_id 
1 3 
+0

この質問はmysqlまたはSql Serverに関連していますか? SQL Serverの場合は、WHERE(cuisinemenu.cuisine_id = '3')でなければなりません。 – Coder1991

+0

空の結果セットは実際には正しいです。結合条件 'menu.id = cuisine_menu.cuisine_id'とwhere句' where cuisine_menu.id = 3'は共存できません。要件を洗練してください。 –

+0

@YusufHassan thatはcuisinemenu.menu_id = menu.idです。この質問がSQL Serverに関係しているかどうかは不明です。 – Coder1991

答えて

0

あなたは以下しようと、簡単なLEFT JOINを使用することができます。

SELECT m.* 
FROM Menu m LEFT JOIN CuisineMenu cm ON m.id = cm.menu.id 
WHERE cm.cuisine_id = 3; 

これは、1行になるはずです。

0
次の中から、あなたのSQLコードを変更し

SELECT *  
    FROM cuisinemenu  
    GROUP BY menu_id 

をこれに:

SELECT *  
    FROM cuisinemenu  
    GROUP BY cuisine_id 

最初のものだけcuisine_idを示すことなく、menu_id示しています。

関連する問題