3

ネストされたクエリに関する簡単な問題があります。正直なところ、1 つのクエリだけで実行できるのか、それとも PHP を使用する必要があるのか​​はわかりません。

簡単に言えば、リレーション テーブルの select ステートメントから返されたユーザー ID によって、ユーザー テーブルからユーザー情報を返したいと考えています。

2つのクエリといくつかのPHPループでこれを行うことができますが、リソースを節約するためですが、1つのクエリと単一のループに結合する方が良いと思います.

最初のクエリ

SELECT UserID FROM relations WHERE GroupID = '1'

2 番目のクエリ 最初の select ステートメントから返された UsersID によって、ユーザー テーブルからユーザー情報を取得する必要があります。

ID をループしてクエリを作成することでこれを行うことができますが、すべてを 1 つのクエリで取得できると思います。

ありがとう

4

6 に答える 6

5

これを行う典型的な方法は次のとおりです。

SELECT     users.*
FROM       users
INNER JOIN relations
ON         users.id = relations.userid
WHERE      relations.groupid = 1

クエリで 1 を引用符で囲んでいることに気付きました。グループ ID は整数値であると想定しています。その場合、引用符は使用しないでください。

IN サブクエリを使用する回答は、パフォーマンスが低下する可能性があります。特に。MySQL では、テーブルからの結果を結合するための推奨される方法は常に JOIN である必要があります。

于 2012-07-18T11:21:12.043 に答える
3
Select * from user_table where id in(SELECT UserID FROM relations WHERE GroupID = '1')
                                   OR
Select * from user_table u INNER JOIN relations r ON u.UserID=r.UserID WHERE r.GroupID='1'
于 2012-07-18T11:18:45.233 に答える
2
select * from user_typw 
where userID in (SELECT UserID FROM relations WHERE GroupID = '1')
于 2012-07-18T11:18:26.120 に答える
1

これを試して

select * from user where UserID  in
(SELECT UserID FROM relations WHERE GroupID = '1')

また

select * from user U where exists 
(SELECT * FROM relations R WHERE U.UserID=R.UserID and  R.GroupID = '1')

また

select U.*
from user U join relations R 
on U.UserID=R.UserID 
where  R.GroupID = '1'
于 2012-07-18T11:18:47.860 に答える
0
SELECT * FROM user_table ut LEFT JOIN relations r on ut.UserID=r.UserID where r.GroupID=1;
于 2012-07-18T11:20:02.577 に答える
0

SELECT A.field1,B.field2 FROM table1 A LEFT JOIN table2 B ON A.common_ID=B.common_ID WHERE field = 'abc'

于 2012-07-18T11:21:32.563 に答える