2011-04-26 65 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提到,不要担心过早优化。查询优化器将尽可能利用缓存。