更正MySQL JOIN格式以避免嵌套SELECT

时间:2009-12-01 04:14:56

标签: mysql join

我有两个单独的SELECT语句:

SELECT VCe.VId FROM `VCe` WHERE `YId` = 9007 AND `MaId` =76 AND `MoId` = 2851

SELECT r_pts.p_id FROM r_pts WHERE r_pts.v_id IN (57202, 57203, 69597, 82261, 82260, 69596, 69595, 82259)

当它们单独运行时,它们都在.05秒内完成,但是当我将第一个嵌套在第二个时,它会急剧增加到3.3秒。

我想进行连接,以便我可以使用第一个select作为IN()的结果集来获取第二个SELECT的输出,但是我无法弄清楚如何在JOIN中包含WHERE条件。

编辑:在我请求时进行连接的正确语法是什么?

感谢您的帮助,感谢您!

2 个答案:

答案 0 :(得分:3)

等同于MattMcKnight's query,同时说明“如何在WHERE中包含JOIN条件”:

SELECT r.p_id 

  FROM r_pts r

       INNER JOIN VCe v
       ON v.VId = r.v_id
   AND 
       v.YId = 9007 
   AND 
       v.MaId = 76 
   AND 
       v.MoId = 2851

答案 1 :(得分:1)

SELECT r_pts.p_id FROM r_pts, 'VCe' WHERE r_pts.v_id = VCe.VId AND VCe.YId = 9007 AND VCe.MaId =76 AND VCe.MoId = 2851

联接的基本目标是描述两个表的关联方式。我从您的示例中推断出,r_pts表中的v_id列是指向VCe表中的VId主键的外键。当您在查询中添加一个术语(例如“r_pts.v_id = VCe.VId”)时,该术语包含您希望加入的每个表中的一个字段,它告诉数据库如何匹配表之间的行以使其成为“虚拟”行“包含两个表中的列。您的其他查询字词限制结果集中包含哪些行。