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没问题,很高兴我能帮上忙!