IN子句中的子查询

时间:2012-02-27 14:49:21

标签: mysql sql

我有以下查询工作:

SELECT DISTINCT table1.field1, table1.field2
FROM table1
WHERE table1.field3 IN (1,2,3)

结果:

 field1 field2
 Data1  60
 Data2  61
 Data3  62

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

SELECT DISTINCT table1.field1, table1.field2
FROM table1
WHERE table1.field3 IN (SELECT table2.field1 FROM table2 WHERE table2.field2 = 100)

结果:

 field1 field2
 Data1  60

如果我执行subquery (SELECT table2.field1 FROM table2 WHERE table2.field2 = 100),则结果为“1,2,3”,与第一个查询完全相同。

我错过了什么?

1 个答案:

答案 0 :(得分:9)

您缺少的是值为'1,2,3'的字符串不是三个整数的列表。这是一个字符串。

如果您希望x IN (SELECT y FROM z)的行为方式与x IN (1,2,3)相同,那么您的子查询必须返回三个项目,其值为123


Web上有 Split()函数,它们接受一个字符串并返回一个由多个整数组成的记录集。这可能修复你的问题。

但事实上,你有一个记录,其中一个字段包含多个值,这是一个更深层次问题的迹象。您永远不应将关系数据库中的多个值存储为单个字符串。而是存储多个记录或多个字段。