0

複数の行を返すサブクエリを含むクエリがあります。

リストを含むテーブルとユーザーを含むテーブルがあります。これら 2 つのテーブルの間に 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 は実際には変数です)、複数の行が返されます。しかし、上のクエリは 1 行しか返しません。これは非常に論理的です。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 に答える