我有四个表,假设它们每个只有一个 id 作为一列。
列表
特征
位置
l_f_location
作为在listingId
、featureId
、locationId
上具有 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,
最佳答案
我假设相同的 listingId
和 locationId
可以有多个 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/