2011-04-26 48 views
2

即時通訊使用mysql並想知道它的語法。子句中的mysql語法

我要讓IN子句是這樣的:

from_id OR to_id IN (
) 

只是我不知道語法是如何

我希望避免在第運行兩次這樣的:

from_id IN (
) 

OR 

to_id IN (
) 

最好的問候 亞歷山大

+1

在大多數情況下,你並不真正需要擔心「條款運行兩次」這樣的,因爲大多數DBMS的緩存數據/使用時暫時保存它,因此它不一定是「努力的兩倍」。 – judda 2011-04-26 04:07:36

回答

0

如果您有一些原因需要擔心IN子句運行兩次(例如,如果子查詢特別複雜且優化程序似乎沒有利用緩存結果集),則您始終可以替換帶INNER JOIN的IN子句。

所以這樣的:

FROM x 
WHERE from_id IN (
    subquery 
) 
OR 
to_id IN (
    subquery 
) 

變成這樣:

FROM x 
    INNER JOIN (
    subquery 
) y ON y.value IN (x.from_id, x.to_id) 
3

你不能做那。只有第二種形式是有效的。

作爲@ judda提到,不要擔心過早優化。查詢優化器將盡可能利用緩存。