2009-12-01 49 views
0

我有兩個單獨的SELECT語句:正確的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) 

當他們單獨運行它們都完成下.05sec但是當我窩在一秒內的第一個,它極大地增加到3.3秒。

我想做一個連接,以便我可以從第二個SELECT使用第一個select的輸出作爲IN()的結果集,但我無法弄清楚如何在JOIN中包含WHERE條件。

編輯:另外什麼是正確的語法做一個連接,因爲我要求?

感謝您的幫助,對此表示感謝!

回答

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」),該詞中包含您希望加入的每個表的字段時,它會告訴數據庫如何匹配表之間的行以使「虛擬行「包含兩個表中的列。您的其他查詢條件限制結果集中包含哪些行。

+0

非常感謝,完美的工作,現在你能解釋或指向我往的資源,我可以查看該語法。 – user103219 2009-12-01 05:16:25

+0

http://msdn.microsoft.com/en-us/library/zt8wzxy4%28VS.80%29.aspx – MattMcKnight 2009-12-01 05:43:48

3

相當於MattMcKnight's query同時說明「如何將在JOINWHERE條件」:

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 
+0

謝謝你的例子! – user103219 2009-12-01 05:21:30

+0

好吧我會改變我的代碼以反映你的'長手'方法,以防萬一數據庫改變sql類型。 – user103219 2009-12-01 05:22:33

+0

@razass:你非常歡迎。無論RDBMS是否發生變化,您可能會發現顯式方法更具可讀性,特別是當查詢變得更復雜時;我知道我是。 – bernie 2009-12-01 05:27:08