【问题标题】:Case statements with Join on lookup查找时加入的案例语句
【发布时间】:2022-01-22 09:02:03
【问题描述】:

我有一个大表,其中一些列具有查找值。我想为每个查找列创建一个描述列,并使用查找表中的描述填充它们。

这是一个例子

主表

select id1, id2, id3 from idtable;
id1 id2 id3
1 2 3
1 3 4

查表

select code, id, desc from lookup;
code id desc
id1 1 id1-desc1
id2 2 id2-desc2
id2 3 id2-desc3
id3 3 id3-desc3
id3 4 id3-desc4

我想要这样的结果集:

id1 id1desc id2 id2desc id3 id3desc
1 id1-desc1 2 id2-desc2 3 id3-desc3
1 id1-desc1 3 id2-desc3 4 id3-desc4

为此编写 SQL 解决方案的最佳和最有效的方法是什么?

【问题讨论】:

  • 仅供参考 case 是一个表达式而不是一个语句
  • 根据问题指南,请展示您的尝试并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。
  • 提示:LEFT JOINLEFT JOINLEFT JOIN...
  • 您好,我仍在试图弄清楚如何接受答案。这是一个很棒的社区,ahsla 总是帮助我。您能否指导选择“接受答案”的选项在哪里?
  • @SQLSERVERDAWG 虽然可能不像它应该的那么明显,但解释是here

标签: sql sql-server tsql select sql-server-2012


【解决方案1】:

你需要三个连接:

SELECT id1, l1.desc AS id1desc,
       id2, l2.desc AS id2desc,
       id3, l3.desc AS id3desc
FROM   idtable i
JOIN   lookup l1 ON id1 = l1.id
JOIN   lookup l2 ON id2 = l2.id
JOIN   lookup l2 ON id3 = l3.id

【讨论】:

  • 谢谢穆雷尼克!它是一个有 100 列和 500k 行的表,我在想是否有比多次连接更好的方法。
  • @SQLSERVERDAWG 我会温和地建议,如果你有 100 个相同的列,那么你有一个严重的非规范化问题
猜你喜欢
  • 2022-10-16
  • 2019-08-08
  • 1970-01-01
  • 1970-01-01
  • 2017-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多