MySQL:查询并连接两个表

标签 mysql

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

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

相关文章:

php - 当我们使用 Raw SQL 时,如何在 Laravel 中使用 like 子句?

where子句内和之间的mysql等式

php - 修改单个 RegEx 以匹配字符串中的中间项

php - array_unique 不工作?

带有 LEFT OUTER JOIN 和 WHERE 的 MySQL 查询

mysql 存储过程 SELECT * into out 参数不起作用

mysql - Sidekiq Worker:Mysql2::Error:用户 'mysqluser' @'ip-address' 拒绝访问(使用密码:NO)

php - 无法在 mysql_fetch_array 中获取循环以在单独的行上打印

php - 无法登录 PHP/MySQL

mysql查询获取根父级