2014-03-31 105 views
0
SELECT user_info.s_name, user_info.name, user_info.f_name, user_info.usr_id, user_info.img_path, Village_master.v_nm 
FROM Village_master 
INNER JOIN User_reg_master ON Village_master.v_id = User_reg_master.v_id 
INNER JOIN user_info ON User_reg_master.usr_id = user_info.usr_id 
WHERE user_info.usr_id NOT LIKE @u_id 
AND user_info.usr_id NOT LIKE (
    SELECT pers_dict_master.pers_dict_ids 
    FROM pers_dict_ids 
    WHERE [email protected]_id 
) 

usr_id | pers_dict_usr_id子查询返回多个值

1 | 13

1 | 6

+0

使用NOT IN而不是NOT LIKE。 – Mihai

回答

0

你所面临的问题是这样的,

user_info.usr_id NOT LIKE 
    (SELECT pers_dict_master.pers_dict_ids 
    FROM pers_dict_ids 
    WHERE [email protected]_id) 

这是你的子查询

(SELECT pers_dict_master.pers_dict_ids 
    FROM pers_dict_ids 
    WHERE [email protected]_id) 

它取2 columns.But在LIKE命令你使用的是一列。

因此,使它工作中使用NOT IN COMMAND

SELECT user_info.s_name, 
     user_info.name, 
     user_info.f_name, 
     user_info.usr_id, 
     user_info.img_path, 
     Village_master.v_nm 
FROM Village_master 
INNER JOIN User_reg_master ON Village_master.v_id = User_reg_master.v_id 
INNER JOIN user_info ON User_reg_master.usr_id = user_info.usr_id 
WHERE user_info.usr_id NOT LIKE @u_id 
    AND user_info.usr_id NOT IN 
    (SELECT pers_dict_master.pers_dict_ids 
    FROM pers_dict_ids 
    WHERE [email protected]_id) 
0

你或许应该包含您的问题,一些更多的细节。子查询是否期望返回多个结果?如果是这样,那么你可以简单地使用TOP(即选择top 1 ...)来得到一个单一的结果,并且如果你想从该结果集中获得一个特定的排序最高值,可以向子查询添加一个ORDER BY。

如果问题是子查询返回的结果不应该超过1个,那么你的问题就更加深入了。看起来您可能打算使用IN作为子查询并进行不同的比较,但很难说清楚。也许你的意思是:

user_info.usr_id NOT IN 
    (SELECT pers_dict_master.pers_dict_ids 
     FROM pers_dict_ids WHERE [email protected]_id)