MySQL SELECT 查询具有多个表的联结表

标签 mysql sql junction-table

我有四个表,假设它们每个只有一个 id 作为一列。

  • 列表
  • 特征
  • 位置
  • l_f_location 作为在 listingIdfeatureIdlocationId
  • 上具有 FK 的联结表

我尝试在 l_f_location 表中查询一组给定的 locationIds(逻辑与匹配),结果只需要那些匹配所有 的列表locationIds,例如(7 和 9 和 10)。

l_f_location 看起来像

listingId featureId locationId
10        5         7
10        7         7
10        8         9
11        4         7
11        8         9
11        9         10
11        12        14

在这种情况下,目标是仅检索 listingId 11 - 匹配 locationIds 7、9 和 10 的集合。

我尝试了以下查询

SELECT id, COUNT(*) as num FROM l_f_locations WHERE locationId IN (7, 9, 10) GROUP by listingId, locationId HAVING num = 3

但是随着分组的开始,这给出了错误的计数值。

类似的查询在更简单的联结表上完美运行,例如只有 l_location 与例如“SELECT id, COUNT(*) as num FROM l_location WHERE locationId IN ( 7, 9, 10) GROUP by listingId HAVING num = 3”。

Rgds,

最佳答案

我假设相同的 listingIdlocationId 可以有多个 featureId?否则会容易得多。

如果是这样的话:

SELECT listingId, COUNT(*) as num 
FROM
(SELECT DISTINCT listingId, locationId
 FROM l_f_locations
 WHERE locationId IN ( 7, 9, 10)) AS sub
GROUP by listingId, HAVING num = 3 

关于MySQL SELECT 查询具有多个表的联结表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19004141/

相关文章:

mysql - 查找每列中最常见的值

php - 如何在 Windows 关闭时终止 PHP session ?

mysql - QSqlTableModel 通知插入的行

MySQL - GREATEST() 和 LEFT JOIN 返回 NULL 的问题

sql - 查询是否存在多个多对多关系

doctrine - 与 Dotrine 的连接表中的鉴别器

python - MySQL Django 模型中的 boolean 字段?

sql - 你如何在 psql 中使用脚本变量?

sql - 将表中的数据合并到一行 T-SQL

php - 从联结表中选择一定数量的行