将IN运算符值与临时表结合使用

时间:2014-05-23 11:44:24

标签: sql postgresql temporary in-operator

我当前查询的一部分是这个CASE WHEN语句:

CASE WHEN SUBSTRING(article_code,1,4) IN ('Ak42','Ales','AlHe','Artu','Behr','Crea','Digi','Egos','Emu_','Fend','Fen2','GiSt',Icon','InMa','Korg','Lin6','Li6S','MAud','MGtr','Mack','Nova','Focu','NoLa','NoLM','Relo','Tasc','TC_E','Vest','Xona','Xpre','Zoom','SndC','LtGn') THEN 'X' ELSE 'Y' END AS lup

这不仅难以阅读/格式化它还有一个基本缺陷,即IN运算符中包含的值列表不是静态的而是动态的。由于数据库中不包含这样的lookup_table,这不太可能改变,我想知道是否有可能创建一个看起来像这样的临时表......:

AC

  • INMA
  • RELO
  • 缩放
  • 等。

...然后将AC列中的值用作IN运算符的值,例如:

CASE WHEN SUBSTRING(article_code,1,4) IN (temp_table) THEN 'X' ELSE 'Y' END AS lup

甚至可以以这种方式使用IN运算符? 如果那是不可能的,也许还有另一种解决方案。

1 个答案:

答案 0 :(得分:1)

是。语法是:

(CASE WHEN SUBSTRING(article_code,1,4) IN (select article_code from temp_table) THEN 'X'
      ELSE 'Y'
 END) AS lup

为获得最佳性能,请创建以article_code为主键的表,或在其上创建索引。