2012-09-18 36 views
0

我正在執行一個查詢,從兩個不同列上的完全相同的表中選擇兩次,並與另一個表中的同一組數據執行比較。使用重複的SELECTS改進查詢?

我目前的方法:

DELETE FROM MY_TABLE 
WHERE MY_TABLE.BUY_ORDER_ID 
IN (SELECT #tmp_table.order_id FROM #tmp_table) 
OR MY_TABLE.SELL_ORDER_ID 
IN (SELECT #tmp_table.order_id FROM #tmp_table) 

是否有提高查詢的方法嗎?

謝謝

回答

1

可能。需要測試你的數據。

DELETE MY_TABLE 
FROM MY_TABLE m 
JOIN #tmp_table 
    on #tmp_table.order_id = m.BUY_ORDER_ID 
    or #tmp_table.order_id = m.SELL_ORDER_ID 

如果#tmp_table.order_id是PK或唯一的,則聲明它。

雞蛋裏挑骨頭,但也許

DELETE MY_TABLE 
FROM MY_TABLE m 
JOIN #tmp_table 
    on #tmp_table.order_id in (m.BUY_ORDER_ID, m.SELL_ORDER_ID) 
1

我試過這在SQL Server上,它似乎更快。我想你可以在sybase上做類似的事情?

DELETE FROM MY_TABLE 
    WHERE EXISTS 
    (
    SELECT * FROM #tmp_table 
    WHERE 
    #tmp_table.order_id = MY_TABLE.BUY_ORDER_ID 
    OR 
    #tmp_table.order_id = MY_TABLE.SELL_ORDER_ID 
    )