将IN与子查询一起使用

时间:2011-10-04 10:53:51

标签: mysql sql subquery

我有两个表,其中一个表中有一列保存另一个表的ID。此列可以包含多个ID,因此我将其存储为列表,例如“1,2,3,4”可以是值。所以我尝试使用以下内容:

SELECT TableAValue
FROM TableA
WHERE TableAID IN 
(SELECT TableAID FROM TableB WHERE TableBID  = 1) 

这只会带回一个值。

现在如果我使用:

SELECT TableAID FROM TableB WHERE TableBID  = 1

这带来了四个值。如果我复制这四个值并使用:

SELECT TableAValue
FROM TableA
WHERE TableAID IN 
(1,2,3,4) 

这将带回我追求的四个价值观。这看起来很简单,所以我想我要么完全错了,要么我错过了一些小细节。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

正如评论讨论中所提到的,你的错误是在一个字段中保存四个值。这样做意味着您持有字符串,单个值,而不是整数列表。如果您想要保留多个值,则需要多个位置来单独保存它们。

因此,如果您有四条记录,每条记录在TableAID中具有不同的值,它将完全按预期工作。

CREATE TABLE TableB (
  TableBID INT,
  TableAID INT
)

INSERT INTO TableB
      SELECT 1, 1
UNION SELECT 1, 2
UNION SELECT 1, 3
UNION SELECT 1, 4
UNION SELECT 2, 3
UNION SELECT 2, 4
UNION SELECT 2, 5
UNION SELECT 2, 6