Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何选择查询中完全完成的行?_Mysql - Fatal编程技术网

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不返回?