使用重复的SELECTS改进查询?

时间:2012-09-18 14:28:20

标签: tsql sybase

我正在执行一个查询,该查询从2个不同列上的完全相同的表中选择两次,并从另一个表中对同一组数据进行两次比较。

我目前的方法:

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 )

有没有办法改进查询?

由于

2 个答案:

答案 0 :(得分: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
    )

答案 1 :(得分: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 )