0

我正在执行一个查询,该查询从 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 )

有没有办法改进查询?

谢谢

4

2 回答 2

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
    )
于 2012-09-18T14:45:50.627 回答
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 )
于 2012-09-18T14:47:52.630 回答