2012-02-27 72 views
2

我有以下查询工作:子查询子句中

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

你可以发布一些示例数据吗? – Taryn 2012-02-27 14:51:34

+0

请将您的文章中的查询结果复制粘贴,同时也列出descr表。发布数据时,在select子句中包含field3。 – danihp 2012-02-27 14:52:02

+0

子查询是否返回三个单独的行,或者一个sngle字符串“1,2,3”? – Mchl 2012-02-27 14:53:13

回答

9

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

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


有迹象表明,有一个字符串,返回由多个整数的记录集在网络上斯普利特()功能。而这可能是修复了你的问题。

但是,您拥有单个记录并保持多个值的单个记录这一事实表明存在更深层次的问题。您不应该将多个值作为单个字符串存储在关系数据库中。而是存储多个记录或多个字段。

+0

你是绝对正确的,谢谢。 – Tenza 2012-02-27 15:01:11