2012-01-05 24 views
4

私はIDを取得したいところでMySQLクエリを作成していますが、クエリで指定したすべての行で一致するものが見つかった場合に限ります。MySql、内部結合クエリは複数の行に一致する必要があります

Table: view_layout_rows 

ID owner rows 
___________________ 
49 1  2 
50 1  2 




Table: view_layout_rows_columns 

ID row columns 
___________________ 
49 1  5 
49 2  4 
50 1  5 
50 2  5 



SELECT vlr.id 
FROM view_layout_rows vlr 
INNER JOIN view_layout_rows_columns vlrc 
ON vlr.id = vlrc.id 
WHERE vlr.rows = 2 
AND (vlr.owner = 0 OR vlr.owner = 1) 

次の条件のすべてを満たす必要がある:

(vlrc.row = 1 AND vlrc.columns = 5) 
(vlrc.row = 2 AND vlrc.columns = 5) 

のみID 50が返されるべきです。 49は、最後の2つの節の最初のものを満たすだけなので、返されるべきではありません。

どうすればよいですか? (私は以前この質問をしましたが、私の要求は不明でした)2番目の試み。 おかげさまで、何かアドバイスをありがとうございました。

答えて

5

レスキューにダブル参加!各テーブルの:-)

SELECT vlc.* 
FROM view_layout_rows vlc 
INNER JOIN view_layout_rows_columns vlrc1 ON vlrc1.id = vlc.id 
INNER JOIN view_layout_rows_columns vlrc2 ON vlrc2.id = vlc.id 
WHERE vlrc1.row = 1 AND vlrc1.columns = 5 
    AND vlrc2.row = 2 AND vlrc2.columns = 5 

    /* imported from original query */ 
    AND vlr.rows = 2 
    AND (vlr.owner = 0 OR vlr.owner = 1); 
+0

おかげで - よさそうです。私は2つ以上の行、5、たとえば、私は5つの内部結合でクエリを動的に構築する場合これは動作しますか? – Lemmy

+0

それを試してみましょう:-) –

+0

@レミー:うまくいくはずです。私があなただったら、この場合は私のスキーマを再考するでしょう:-) –

0

シングルアクセス:

select r.* 
from view_layout_rows r 
join (select id, count(*) rec_count 
     from view_layout_rows_columns 
     where row in (1,2) and 
      columns = 5 
     group by id 
     having count(*) = 2) c 
on r.id = c.id 
where r.rows = 2 and 
     r.owner in (0,1) 
+0

列の値が異なる場合、これをどのように表現できますか?例えば(vlrc.row = 1 AND vlrc.columns = 2) (vlrc.row = 2 AND vlrc.columns = 5) – Lemmy

+0

インラインビューに 'where'節を修正します。 '(行= 1 AND列= 2)または(行= 2 AND列= 5)です。 –

+0

これは素晴らしいソリューションのようです - ありがとう。 – Lemmy

関連する問題