0

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

  • listings
  • feature
  • location
  • l_f_location作为带有 FK 的连接表listingId,, featureId,locationId

我尝试在l_f_location表中查询给定的一组locationIds(逻辑与匹配),结果只希望那些匹配所有的列表locationIds,例如(7 AND 9 AND 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

在这种情况下,目标是仅检索listingId11 个 - 匹配locationIds7、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,P.

4

1 回答 1

3

我假设相同listingId并且locationId可以有多个featureIds?否则,它会容易一些。

如果是这样的话:

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 
于 2013-09-25T12:21:41.637 回答