我有以下mysql表结构,
id product_id filter_tag_id
14 1 48
17 3 49
18 10 49
19 10 54
20 11 49
21 11 55
22 12 49
23 12 56
24 9 48
25 9 52
26 6 48
27 6 53
28 7 48
29 7 56
30 8 48
31 8 53
32 13 48
33 13 52
34 14 48
35 14 54
36 14 55
37 15 48
38 15 55
我只需要获取那些具有相同filter_tag_id的product_id' 例如,只有一个product_id(9和13)具有相同的filter_tag_id(48和52),所以我只需要获取product_id 9和13,我正在尝试以下查询,但还没有成功。
select product_id from filter_data where filter_tag_id=52 AND filter_tag_id=48;
select product_id from filter_data where filter_tag_id in (52,48);
第一个查询返回没有结果,第二个返回错误结果
答案 0 :(得分:0)
使用GROUP BY
Select product_id,COUNT(DISTINCT filter_tag_id) filter_match
from filter_data where filter_tag_id in (52,48)
GROUP BY product_id
HAVING filter_match = 2
filter_match
的值是您将通过in
条件
答案 1 :(得分:0)
如果您想要的是仅查找product_id
个filter_tag_id
值等于48
和 52
并且强>除了这两个值之外别无其他,然后尝试:
SELECT product_id
FROM mytable
GROUP BY product_id
HAVING COUNT(CASE WHEN filter_tag_id = 48 THEN 1 END) > 0 AND
COUNT(CASE WHEN filter_tag_id = 52 THEN 1 END) > 0 AND
COUNT(CASE WHEN filter_tag_id NOT IN (48,52) THEN 1 END) = 0
答案 2 :(得分:0)
使用自我加入。它看起来比GROUP BY
更复杂,但它比group-by更快。因为使用GROUP BY
方法,只有48或52的那些应该被分组,这不是不需要的行。
SELECT t1.product_id
FROM filter_data t1 INNER JOIN filter_data t2 ON t1.product_id = t2.product_id
WHERE t1.filter_tag_id = 48 AND t2.filter_tag_id = 52;