有没有办法将这些查询合二为一?

时间:2011-07-05 14:29:28

标签: mysql sql optimization join

我有两个问题。我不知道如何只用一个产生同样的效果。我不喜欢SQL ...

这是伪代码:

friends = query("
    SELECT `bio_contacts`.`contact_id`
    FROM `bio_contacts`
    WHERE `bio_contacts`.`user_id` = '33'
")

query("
    SELECT `bio_community_events`.`id`, `bio_community_events`.`begin_on`, `bio_community_events`.`name`
    FROM `bio_community_events`
    WHERE `bio_community_events`.`user_id` IN friends
")

有没有办法将它们合并为一个查询?我猜它应该会提高性能。有了加入,也许?

2 个答案:

答案 0 :(得分:2)

SELECT `bio_community_events`.`id`, `bio_community_events`.`begin_on`, `bio_community_events`.`name`
FROM `bio_contacts` 
LEFT JOIN `bio_community_events` 
ON `bio_contacts`.`contact_id`= `bio_community_events`.`user_id`
WHERE `bio_contacts`.`user_id` = '33'

答案 1 :(得分:1)

您的查询甚至不需要加入。 你可以这样说:

  

SELECT bio_community_eventsid,   bio_community_eventsbegin_on,   bio_community_eventsname       来自bio_community_events       在bio_community_eventsuser_id = 33;

或者 - 您的字段名称有点偏离,我们是否应该加入以下字段:bio_contacts.contact_id = bio_community_events.user_id?在那种情况下你可以做到 以下加入:

SELECT `bio_community_events`.`id`, `bio_community_events`.`begin_on`, `bio_community_events`.`name`
    FROM `bio_community_events` INNER JOIN `bio_contacts` on `bio_community_events`.user_id=bio_contacts.contact_id
WHERE bio_contacts.user_id=33;