SQL多行子查询

时间:2011-07-20 09:33:07

标签: sqlite

我有一张表Studies,我执行了SELECT。

然后我需要在返回的记录集上执行进一步的SELECT。我试过这个(为了清晰起见而简化):

SELECT * FROM Studies
WHERE Id = '2' OR Id = '3' OR Id = '7';

SELECT * FROM Studies
WHERE (Name = 'Test')
  AND Id IN (SELECT * FROM Studies WHERE Id = '2' OR Id = '3' OR Id = '7');

但是我一直收到以下SQL错误:

  

只有一个结果允许SELECT作为表达式的一部分


我哪里错了?如果从我的代码中看不出来 - 我对数据库编程比较陌生。

由于

2 个答案:

答案 0 :(得分:13)

您不能在IN (...)子查询中返回多个列。您必须将*(返回所有列)更改为ID。但是您的查询不需要子查询,您只需将ID添加到第一个查询即可。由于性能原因,您通常希望尽可能避免使用子查询。

SELECT * 
FROM Studies 
WHERE Name = 'Test' 
AND ID IN ('2', '3','7')

或者如果你想保留你的结构:

SELECT * 
FROM Studies 
WHERE (Name = 'Test') 
AND ID IN (SELECT ID FROM Studies WHERE ID = '2' OR ID = '3' OR ID = '7');

答案 1 :(得分:1)

SELECT * FROM Studies WHERE (Name = 'Test') AND ID IN (SELECT ID FROM Studies WHERE ID = '2' OR ID = '3' OR ID = '7');