如何重建这个SQL查询

时间:2014-09-03 06:00:56

标签: mysql sql

service_option表和room表具有相同的列room_keyroom表和user表共享同一列{{1我想要的是从服务选项中获取用户的信息。

user_key

使用嵌套在另一个IN中的IN变得非常低效。

3 个答案:

答案 0 :(得分:2)

这可能是您正在寻找的查询:

SELECT U.user_key
     ,U.user_id
     ,U.user_status
     ,U.user_company_name
FROM [user] U
INNER JOIN room R ON R.user_key = U.user_key
INNER JOIN service_option S ON S.room_key = R.room_key
                              AND S.service_option_key = 3
                              AND S.ordered_service_Option_status != 0

INNER JOIN方法将更高效,并使查询更具可读性。

希望这会对你有所帮助。

答案 1 :(得分:2)

不要使用WHERE IN,而是加入:

SELECT u.user_key, u.user_id, u.user_status, u.user_company_name
FROM user u, room r, service_option so
WHERE u.user_key = r.user_key 
AND r.room_key = so.room_key 
AND so.service_option_key = 3 
AND so.ordered_service_option_status != 0

答案 2 :(得分:1)

SELECT u.user_key, u.user_id, u.user_status, u.user_company_name
FROM 
user u join room r on u.user_key = r.user_key
join service_option so on so.room_key = r.room_key 
WHERE 
so.service_option_key = 3 AND so.ordered_service_option_status !=0