2

JOINしたいと思う2つのテーブルがあります。私はこれに非常に慣れていないため、完全には確信が持てません…</p>

最初のテーブルは、変数id、slug、nameなどを持つ会場と呼ばれます。2番目のテーブルは、変数id、option、venue、value を持つ会場_用語です。一致する変数は明らかにvenues.idとvenue_terms.venueです。

私がやりたいのは、 venue_termsに一致する値をクエリし、それSELECT * FROM venuesを一致させることです。

次のクエリを使用していますが、機能させることができませんでした。INTERSECT が解決策ではないことはわかっていますが、どの JOIN を使用すればよいかはわかりません。

SELECT venue
FROM venue_terms
WHERE `option` = '1' AND `value` = '10'

INTERSECT

SELECT venue
FROM venue_terms
WHERE `option` = '2' AND `value` = '4';

それらのvenue_terms.venueをvenuesテーブルに一致させたいです。誰かが私を正しい方向に向けることができますか?

更新:明確にするために、最終的に同じvenue.idを持つ複数のオプション/値の組み合わせを検索しようとしています。基本的に、(オプション = 1 および値 = 4) AND (オプション = 2 および値 = 10) AND など、これらすべてが真であるすべての会場を見つけられるようにしたいと考えています。

4

4 に答える 4

2

これを試して

SELECT venue.*, venue_terms.*
FROM venue 
INNER JOIN venue_terms ON venue.id = venue_terms.venue 
WHERE venue_terms.option IN ( 1 ,2)
AND venue_terms.value IN (10,4)
GROUP BY venue.id
于 2012-06-16T12:04:03.397 に答える
2

これはどう?

SELECT t1.*, t2.*
FROM venue t1 JOIN venue_terms t2
ON t1.id = t2.venue
WHERE (t2.option = 1 AND t2.value = 10)

注: オプションと値のタイプはINT.

タイプの場合は、varchar上記のクエリを次のように変更します

SELECT t1.*, t2.*
FROM venue t1 JOIN venue_terms t2
ON t1.id = t2.venue
WHERE (t2.option = '1' AND t2.value = '10')

更新 1

OR新しい要件に従って、以下に示すようにオプションを使用してその条件を追加するだけです。

SELECT t1.*, t2.*
FROM venue t1 JOIN venue_terms t2
ON t1.id = t2.venue
WHERE 
     (t2.option = 1 AND t2.value = 10)
     OR
     (t2.option = 3 AND t2.value = 14)
于 2012-06-16T11:56:19.967 に答える
1

これにより、2 つのテーブルが結合され、venue_terms の属性 (オプション、値) に一致する会場が出力されます。

SELECT v.* FROM venue v, venue_terms vt
WHERE v.id = vt.venue
AND vt.option = 1 
AND vt.value = 10
于 2012-06-16T11:47:38.877 に答える