1

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

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

但是有没有更有效的方法来做到这一点?

4

2 回答 2

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)

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

于 2013-11-27T03:40:16.357 回答
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)

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

于 2013-05-16T17:14:18.657 回答