2015-02-24 89 views
1

对于此查询:
转子查询到连接查询

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列(S)

是否有可能在连接中使用2列而不是子查询?如果是,如何?

+0

当然可以,但在查询你正在做你不需要第二个选择列在where子句中使用它们。除非你需要user_two,在这种情况下,你可以在子查询中使用UNION。一个选择user_one,联合到第二个选择user_two。 – gmiley 2015-02-24 18:08:15

+0

但我想只显示两列中的一列,具体取决于哪一列不是我。有可能是user_one或user_two是我自己,这取决于谁问谁是朋友。 – Schwesi 2015-02-24 18:09:43

回答

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') 
0

选择a.userid,从用户a.username 一个 内加入的朋友b 上a.userid = b.userid 其中b.user_one = '$添加my_id' 或b.user_two = '$添加my_id'

0

试试这个:因为IN子句不能在WHERE语句选择上多列

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' 
0

查询返回的错误。

我想你正在寻找可能是这样的

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

SELECT USER_ID,USER_NAME 来自用户的一个朋友b WHERE a.user_id = b.user_one AND(b.user_one = '$添加my_id' OR b.user_two = '$添加my_id')

1

users表,其中你的user_id是在user_one或friends表user_two线,你可以做到以下几点:

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' 
); 
+0

非常感谢您的回答!出于某种原因,我的名字不是我朋友的名字。 – Schwesi 2015-02-24 18:20:42

+1

这是因为WHERE子句需要与union的每个部分的SELECT子句中的内容相反。 @kringeltorte – AdamMc331 2015-02-24 18:52:31

0

IN操作数只需要一个参数。如果你想得到你所有的朋友,你需要这样做,只返回一列。你可以做这样的事情与UNION:

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

然后,用它作为你的参数:

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');