我有一个包含一列的Universe,其中有3种类型的id。我知道我可以在WHERE语句中使用3个单独的OR子句
WHERE isin IN(n)
OR cusip IN(n)
OR psedol IN(n)
但有更有效的方法吗?
答案 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子句中快得多。 跳这将工作。