【发布时间】:2021-07-19 18:15:36
【问题描述】:
我对 SQL 很陌生。我正在尝试加入两个表,如果 JOIN 返回 null,则加入默认值。
学生:
student_id s_major name
------------ ---------- --------
123 CS Alice
456 CS1 Bob
789 CS2 Eve
专业:
m_major description
--------- ---------------------
CS Computer Science
CS1 Computer Science 1
我希望得到这样的结果表:
student_id s_major m_major name description
------------- -------- --------- ------- -----------------
123 CS CS Alice Computer Science
456 CS1 CS1 Bob Computer Science 1
789 CS2 CS Eve Computer Science
**所有变量都是char类型
例如,“CS2”,将“2”视为主要选项,但没有此主要选项的说明。所以这个主要选项的默认值将只是主要的,在这种情况下是“CS”。
我发现了一个 post 建议使用 CROSS APPLY。但似乎 DB2 中没有 CROSS APPLY。所以我正在尝试看看是否有任何等效或解决方法。
如果您需要更多信息,请告诉我。提前致谢。
【问题讨论】:
-
看看 CROSS JOIN。 w3resource.com/sql/joins/cross-join.php
-
@Jeremy 感谢您的评论。我确实检查了 CROSS JOIN。但是 CROSS JOIN 给了我比我需要的更多的行。我不确定在 WHERE 子句中放入什么来过滤结果表
-
如何准确定义默认值?它们是一些预定义的常量,还是以某种方式从这些表中派生出来的?为什么 id=789 的行有 name=Casey 而不是 Eve(如 Student)?
-
@MarkBarinstein 感谢您的评论。例如,CS2,将 '2' 视为主要选项,但没有此主要选项的说明。所以这个主要选项的默认值将只是主要的,在这种情况下是'CS'。抱歉,id = 789,name = Casey 是个错误。我会解决的。感谢您指出这一点。