Mysql 如何选择查询中完全完成的行?
我们的表有两列-Mysql 如何选择查询中完全完成的行?,mysql,Mysql,我们的表有两列-art\u id和cat\u id。 我们需要选择cat\u id=12、13、15的行 我试着做点什么: SELECT art_id FROM table WHERE cat_id IN (12,13,15) GROUP BY art_id HAVING COUNT(cat_id) > 2 但是这个选择也选择了art_id=4和9 预期输出: art_id = 1 and 7 我希望这对你有用 SELECT art_id FROM table WHERE
art\u id
和cat\u id
。
我们需要选择cat\u id
=12、13、15的行
我试着做点什么:
SELECT art_id
FROM table
WHERE cat_id IN (12,13,15)
GROUP BY art_id
HAVING COUNT(cat_id) > 2
但是这个选择也选择了art_id=4和9
预期输出:
art_id = 1 and 7
我希望这对你有用
SELECT art_id
FROM table
WHERE cat_id IN (12,13,15)
AND (art_id = 4 OR art_id = 7)
GROUP BY art_id
HAVING COUNT(cat_id) > 2
您可以尝试这种方法,但只有在您没有art\U id、cat\U id重复的情况下,它才起作用。例如:如果您将示例数据
插入T1值(9,15)
两次,它就不起作用
SELECT DISTINCT T1.art_id
FROM T1
INNER JOIN (SELECT art_id, COUNT(*) AS RC
FROM T1
WHERE CAT_ID IN (12,13,15)
GROUP BY art_id) X ON T1.art_id = X.art_id
WHERE X.RC>2
输出:
art_id
-----------
1
7
假设你事先不知道艺术ID,也许是这个
SELECT art_id, GROUP_CONCAT(cat_id SEPARATOR ',') as concatenated
FROM table
GROUP BY art_id
HAVING concatenated = '12,13,15'
如果每组中的顺序可能不同。例如13、12、15那么你也需要对这些组合进行排序
SELECT art_id,
GROUP_CONCAT(DISTINCT cat_id ORDER BY cat_id ASC SEPARATOR ',') AS concatenated
FROM table
GROUP BY art_id
HAVING concatenated = '12,13,15'
为什么OP要“尝试此代码”?一个好的答案总是会有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了未来的访客,这样他们可能会发现这个问题并阅读你的答案。谈谈如何让选举对你有利!您的查询应该只返回
1,7
结果集,您确定这是您在此处发布的完整数据吗?@Shaharyar,是的。我在描述中的查询(我认为是示例查询)是错误的。请检查此项谢谢您的想法!如果您希望art id 1仅具有三个值12、13、15,则该选项有效。如果您也有其他值(例如,将INSERT INTO T1值(1,17)添加到示例数据中)时需要art id 1,那么它就不起作用了。是的,这确实是一个约束。但这似乎是原始查询的目的->它在哪里完全匹配。由此推断,如果(1,17)被包括在内,那么1不返回?