MySQL:在IN子句中循环遍历多个字段

时间:2013-03-14 14:35:11

标签: mysql where-in

我有一个包含一列的Universe,其中有3种类型的id。我知道我可以在WHERE语句中使用3个单独的OR子句

WHERE isin IN(n) 
OR cusip IN(n) 
OR psedol IN(n)

但有更有效的方法吗?

2 个答案:

答案 0 :(得分:0)

颠倒IN子句的顺序:

WHERE (n) IN (isin, cusip, psedol)

编辑:以上只有在(n)只有一列时才有效,例如,如果它是“(SELECT x FROM y)”。如果它是一个事项列表,那么撤销订单将无效,您必须保留它。

如果(n)是选择的另一个解决方案是将选择器向上移动到连接中。连接比IN子句更有效。例如,如果n是“SELECT a FROM z”,则可以执行以下操作:

FROM y
INNER JOIN z ON z.ID = y.ID
INNER JOIN x ON x.ID = y.ID AND (x.isin = z.a OR x.cusip = z.a OR x.psedol = z.a)

...但这取决于整个查询的结构,因此您必须为我提供更多信息以便更具体。

答案 1 :(得分:0)

我建议与spsc_tech

略有不同
FROM y
LEFT JOIN z ON ( z.ID = y.ID AND Z.ISIN = n)
LEFT JOIN x ON ( x.ID = y.ID AND X.CUSIP = n)
LEFT JOIN w ON ( w.ID = y.ID AND w.psedol = n)

如果在条件中将条件放在连接中,它比在Where子句中快得多。 跳这将工作。