IN子句中的子查询

Ten*_*nza 2 mysql sql

我有以下查询工作:

SELECT DISTINCT table1.field1, table1.field2
FROM table1
WHERE table1.field3 IN (1,2,3)
Run Code Online (Sandbox Code Playgroud)

结果:

 field1 field2
 Data1  60
 Data2  61
 Data3  62
Run Code Online (Sandbox Code Playgroud)

以下查询只给出第一行,它应该给出与第一个查询完全相同的结果.

SELECT DISTINCT table1.field1, table1.field2
FROM table1
WHERE table1.field3 IN (SELECT table2.field1 FROM table2 WHERE table2.field2 = 100)
Run Code Online (Sandbox Code Playgroud)

结果:

 field1 field2
 Data1  60
Run Code Online (Sandbox Code Playgroud)

如果我执行subquery (SELECT table2.field1 FROM table2 WHERE table2.field2 = 100),结果是"1,2,3",就像第一个查询一样.

我错过了什么?

Mat*_*lie 9

你缺少的是带有值的字符串'1,2,3'不是三个整数的列表.这是一个字符串.

如果你想x IN (SELECT y FROM z)以同样的方式表现为x IN (1,2,3),那么你的子查询必须返回三个项目,与价值观1,23.


Web上 有Split()函数,它们接受一个字符串并返回一个由多个整数组成的记录集.这可能会解决您的问题.

但是,如果您有一个包含多个值的单个字段的记录,则表明存在更深层次的问题.您永远不应将关系数据库中的多个值存储为单个字符串.而是存储多个记录或多个字段.