我有两张表我想加入。我对此很陌生,并不完全确定……
第一个表名为 venues,包含变量 id、slug、name 等。第二个表是 venue_terms,包含变量 < em>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 的多个选项/值组合。基本上,我希望能够找到 (option = 1 and value = 4) AND (option = 2 and value = 10) AND 等的所有地点......所有这些都是真的。
最佳答案
您想在 venue_terms
表的两行 中找到符合条件的地点
。这可以通过各种方法来完成。最常见的是两次连接该表(另一个是通过分组查询)。
这是第一种方式。两次加入 venue_terms
表:
SELECT v.id --- whatever columns you need
, v.slug --- from the venues table
, v.name
FROM venues AS v
INNER JOIN venue_terms AS vt1
ON vt1.venue = v.id
INNER JOIN venue_terms AS vt2
ON vt2.venue = v.id
WHERE ( vt1.option = 1 AND vt1.value = 10 )
AND ( vt2.option = 2 AND vt2.value = 4 ) ;
如果你有3个条件,加入三次。如果你有10个条件,加入10次。在 terms 表中的 (option, value, venue)
上有一个复合索引对查询效率有好处。
关于MySQL:查询并连接两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11063092/