0

我有一个带有返回多行的子查询的查询。

我有一个带有列表的表格和一个带有用户的表格。我在这两个表之间创建了一个多对多表,称为 list_user。

LIST
id INTEGER
list_name TEXT
list_description TEXT

USER
id INTEGER
user_name TEXT

LIST_USER
id INTEGER
list_id INTEGER
user_id INTEGER

我的子查询查询

SELECT * FROM user WHERE id = (SELECT user_id FROM list_user WHERE list_id = 0);

子查询有效(我在代码中使用它,所以 0 实际上是一个变量)并且它返回多行。但是上面的查询只返回一行,这很合乎逻辑;我检查 id 是否等于某个值,它只检查子查询的第一行。

如何更改我的语句,以便在上部查询中获得多行?

4

2 回答 2

6

我对=SQLite 中的作品感到惊讶。它会在大多数数据库中返回错误。在任何情况下,您都需要以下in声明:

SELECT *
FROM list
WHERE id in (SELECT user_id FROM list_user WHERE list_id = 0);
于 2012-12-05T21:45:17.000 回答
2

为了获得更好的性能,请使用以下查询:

SELECT LIST.ID,
       LIST.LIST_NAME,
       LIST.LIST_DESCRIPTION 
FROM   LIST,
       USER,
       LIST_USER
WHERE  LIST.ID = LIST_USER.USER_ID = USER.ID AND
       LIST.LIST_ID = 0
于 2012-12-05T21:54:01.493 回答