Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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 使用带有where子句条件的GROUP_CONCAT时结果不正确_Mysql_Sql_Group Concat - Fatal编程技术网

Mysql 使用带有where子句条件的GROUP_CONCAT时结果不正确

Mysql 使用带有where子句条件的GROUP_CONCAT时结果不正确,mysql,sql,group-concat,Mysql,Sql,Group Concat,我有一张这样的桌子: ID | GenEx | CodeName | Desc ---------------------------- 1 | Cipro | Dolvo | 2 | Ludavil | Ymir | 3 | Cipro | Alpha | SELECT GenEx, GROUP_CONCAT(CodeName) AS Code FROM Drugs D WHERE `CodeName` IN ('Alpha') GROUP BY

我有一张这样的桌子:

ID | GenEx   | CodeName | Desc
----------------------------
1  | Cipro   | Dolvo    | 
2  | Ludavil | Ymir     | 
3  | Cipro   | Alpha    |
SELECT GenEx, GROUP_CONCAT(CodeName) AS Code 
FROM Drugs D 
WHERE `CodeName` IN ('Alpha')
GROUP BY GenEx;
我的问题是这样的:

ID | GenEx   | CodeName | Desc
----------------------------
1  | Cipro   | Dolvo    | 
2  | Ludavil | Ymir     | 
3  | Cipro   | Alpha    |
SELECT GenEx, GROUP_CONCAT(CodeName) AS Code 
FROM Drugs D 
WHERE `CodeName` IN ('Alpha')
GROUP BY GenEx;
我想要的结果是:

| Genex |    Code     |
+-------+-------------+
| Cipro | Dolvo,Alpha |
我得到的结果是:

| Genex |    Code     |
+-------+-------------+
| Cipro | Alpha,Alpha |

WHERE IN()
子句导致
GROUP\u CONCAT
替换返回的与该限制集匹配的任何内容。只要包含
Alpha
,我如何使它与该集合之外的代码匹配?

我将首先编写一个子查询,以获取哪个genex具有Alpha代码:

SELECT DISTINCT genex
FROM drugs
WHERE codeName = 'Alpha';
然后,您可以将其用作子句中的,这样它只包括在组concat列表中具有Alpha的genex:

SELECT genex, GROUP_CONCAT(code_name)
FROM drugs
WHERE genex IN (
   SELECT DISTINCT genex
   FROM drugs
   WHERE codeName = 'Alpha')
GROUP BY genex;
编辑

关于子查询的一个小提示是,如果要检查行中的多个代码,您仍然可以将
WHERE=
替换为

SELECT DISTINCT genex
FROM drugs
WHERE codeName IN ('Alpha');

下面是一个示例。

如果您不想使用子查询(无论出于何种原因),可以尝试以下方法:

或:


但是一个子查询几乎肯定比上面两个查询中的任何一个都更有效。

b/c这是一个例子,我需要知道我理解的更复杂的查询的位置。我删除了我的评论,我第一次读它时就误解了。@K没问题,很高兴我能帮上忙!