MySQL:查询并连接两个表

标签 mysql

我有两个我想加入的表。我对此很陌生,并不完全确定......

第一个表名为 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/

相关文章:

mysql - 带 WHERE 部分的外键约束 MySQL

php - 特定搜索查询出错

mySQL创建函数

iphone - 基于服务器的数据库

php - 连接到mysql数据库

mysql - 有没有 "Virtual LDAP"网关?

php - 按 id 排序不起作用

mysql - 获取mysql两个表的数据

sql - 创建表失败

mysql - 选择子查询的结果