我有两个我想加入的表。我对此很陌生,并不完全确定......
第一个表名为 venues,包含变量 id、slug、name 等。第二个表名为 venue_terms,包含变量 < em>id、选项、地点、值。匹配变量显然是venues.id和venue_terms.venue。
我想要做的是查询venue_terms以获取匹配的值,然后SELECT * FROMvenues
匹配。
我一直在处理以下查询,但无法让它工作。我知道 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
中两行中的条件匹配的venues
。这可以通过多种方法来实现。最常见的是连接该表两次(另一个是通过分组查询)。
这是第一种方法。两次加入 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/56212759/