子查询返回多个值

时间:2014-03-31 17:35:40

标签: sql

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 pers_dict_master.usr_id=@u_id
)

usr_id |的 pers_dict_usr_id

1 | 13

1 | 6

2 个答案:

答案 0 :(得分:0)

你面临的问题是这个,

user_info.usr_id NOT LIKE
  (SELECT pers_dict_master.pers_dict_ids
   FROM pers_dict_ids
   WHERE pers_dict_master.usr_id=@u_id)

这是您的子查询

  (SELECT pers_dict_master.pers_dict_ids
   FROM pers_dict_ids
   WHERE pers_dict_master.usr_id=@u_id)

提取两列。但在LIKE命令中,您使用的是一列。

所以让它工作USE 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 pers_dict_master.usr_id=@u_id )

答案 1 :(得分:0)

您可能应该提供有关您的问题的更多详细信息。子查询是否应该返回多个结果?如果是这样,那么你可以简单地使用TOP(即选择前1 ...)来获得单个结果,并且如果你想从该结果集中获得某个排序的最高值,则将ORDER BY添加到子查询。

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

user_info.usr_id NOT IN
    (SELECT pers_dict_master.pers_dict_ids
         FROM pers_dict_ids WHERE pers_dict_master.usr_id=@u_id)