我有以下查询工作:
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”,与第一个查询完全相同。
我错过了什么?
答案 0 :(得分:9)
您缺少的是值为'1,2,3'
的字符串不是三个整数的列表。这是一个字符串。
如果您希望x IN (SELECT y FROM z)
的行为方式与x IN (1,2,3)
相同,那么您的子查询必须返回三个项目,其值为1
,2
和3
。
Web上有 Split()函数,它们接受一个字符串并返回一个由多个整数组成的记录集。这可能修复你的问题。
但事实上,你有一个记录,其中一个字段包含多个值,这是一个更深层次问题的迹象。您永远不应将关系数据库中的多个值存储为单个字符串。而是存储多个记录或多个字段。