簡體   English   中英

將子查詢轉換為連接查詢

[英]Turn subquery into join query

對於此查詢:

SELECT `user_id`, `user_name` FROM users WHERE `user_id` IN (SELECT user_one, user_two FROM friends WHERE user_one='$my_id' OR user_two = '$my_id')

我收到此錯誤消息:

基數違規:1241操作數應包含1列

是否可以在連接中使用2列而不是子查詢? 如果是,怎么樣?

為什么不使用這樣的聯盟:

SELECT `user_id`, `user_name` 
        FROM users 
           WHERE `user_id` IN (SELECT user_one FROM friends 
                                               where user_one = '$my_id'
                               UNION
                               SELECT user_two FROM friends 
                                               where user_two = '$my_id')

如果您希望user_id位於user_one或users_two的friends表中的users表中的記錄,您可以執行以下操作:

SELECT `user_id`, `user_name` 
FROM users 
WHERE `user_id` IN (
    SELECT user_one 
    FROM friends 
    WHERE user_one = '$my_id'
)
UNION ALL
SELECT `user_id`, `user_name` 
FROM users 
WHERE `user_id` IN (
    SELECT user_two 
    FROM friends 
    WHERE user_two = '$my_id'
);

從用戶選擇a.userid,a.username a.userid = b.userid中的內部聯接朋友b,其中b.user_one ='$ my_id'或b.user_two ='$ my_id'

嘗試這個:

SELECT user_id, user_name FROM users U
join friends F
ON F.user_id=U.user_id
and F.user_name=U.user_name
WHERE  F.user_one='$my_id' OR F.user_two = '$my_id'

您的查詢返回錯誤,因為IN子句無法在where語句中的多個列上進行選擇。

我認為你在尋找的東西可能是這樣的

SELECT 
    user_id, 
    user_name 
FROM users INNER JOIN Friends ON Users.User_ID = User_one OR Users.User_ID = User_Two

SELECT user_id,user_name FROM users a,friends b WHERE a.user_id = b.user_one AND(b.user_one ='$ my_id'OR b.user_two ='$ my_id')

IN操作數只接受一個參數。 如果你想得到你所有的朋友,你需要以只返回一列的方式這樣做。 您可以使用UNION執行類似的操作:

SELECT user_one
FROM friends
WHERE user_two = 'me'
UNION
SELECT user_two
FROM friends
WHERE user_one = 'me';

然后,將其用作IN參數:

SELECT user_id, user_name
FROM users
WHERE user_id IN(
   SELECT user_one
   FROM friends
   WHERE user_two = 'me'
   UNION
   SELECT user_two
   FROM friends
   WHERE user_one = 'me');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM