如何在MySQL级联的SELECT语句中使用'IN'语句?

问题描述 投票:0回答:2

我有两个表A和B。我需要使用GROUP_CONCAT在组合语句中从它们中提取数据。目前,它无法正常运行。因此,我将该语句分为两个单独的简单语句进行测试。

这就是我的做法。

Tabel A
FIELD1 FIELD
1      A  
2      B
3      C

Table B
FIELD1  FIELD2
1       1,2
2       1
3       2,3

我可以按如下方式阅读Tabel B

SELECT B.FIELD2 FROM B WHERE FIELD1=3

输出是

FIELD2
2,3

现在,如果我按如下方式阅读表A,

SELECT GROUP_CONCAT(A.FIELD2) FROM A WHERE FIELD1 IN (2,3)

我知道

FIELD2
B,C

现在,我想通过以下语句获得相同的输出,但失败。

SELECT GROUP_CONCAT(A.FIELD2) FROM A WHERE FIELD1 IN (SELECT B.FIELD2 FROM B WHERE FIELD1=3)

是否有帮助修改该语句?

mysql sql csv group-concat
2个回答
1
投票

这有点难以解释。 IN运算符不会查看列中的CSV字符串,而是将其视为逗号分隔的要查看的值列表。如果列值是一些CSV数据,则in运算符将在其他值列表中查找该确切的字符串,逗号和所有内容。

2 IN (1,2) --true
'2' IN ('1','2') --true
'2' IN ('1,2') --false 
'1,2' IN ('1,2') --true

始终记住,您的SQL就像其他程序一样被编译。您写入语句的数据将成为程序的一部分。表中的数据不成为程序的一部分。这就是为什么您不能在表格行中用逗号分隔的某些东西上使用IN的原因

按现状,您必须将'2,3'分为两行'2'和'3',或将其保留为字符串并使用like

SELECT GROUP_CONCAT(A.FIELD2) 
FROM A
  INNER JOIN B 
  ON CONCAT(',', B.FIELD2, ',') LIKE CONCAT('%,'A, .FIELD1, ',%')
WHERE B.FIELD1=3

讨厌! :)


1
投票

您可以使用IN运算符来执行此操作,因为B.FIELD2不是值列表(这是IN期望的值),而是一个字符串。您必须加入表并使用FIND_IN_SET()

© www.soinside.com 2019 - 2024. All rights reserved.