我正在尝试编写一个sql语句来获取表中两列的描述。但是,a.code_2列中的某些行为null,并且不需要获取描述。我的sql语句如下所示。它只捕获code_1和code_2中具有值的列,而不是a.code_2为null的行。
SELECT ID, CODE_1, B.CODE_DESC, CODE_2, C.CODE_DESC
FROM TBLCODE A, TBLDESC B, TBLDESC C
WHERE A.CODE_1 = B.CODE1
AND A.CODE_2 = (CASE WHEN a.CODE_2 IS NULL THEN '' ELSE C.CODE1 END);
答案 0 :(得分:0)
您需要阅读联接(内部和外部)。我也不完全确定你在使用TBLDESC C做什么,但这是我最好的猜测。左连接意味着“显示左侧的所有列,无论它们是否加入到右侧的任何内容”。
SELECT ID, CODE_1, B.CODE_DESC, CODE_2, B.CODE_DESC
FROM TBLCODE AS A
LEFT JOIN TBLDESC AS B ON A.CODE_1 = B.CODE1
答案 1 :(得分:0)
看起来你想要TBLDESC
的{{1}}表的内连接,只要它永远不为空;以及CODE_1
的同一个表的外部联接。当CODE_2
为null且找不到任何内容时,CODE_2
将为null - 但将其作为外连接意味着C.CODE_DESC
记录不会被丢弃,这就是你现在从两个内在联系中看到了:
TBLCODE
如果SELECT A.ID, A.CODE_1, B.CODE_DESC AS DESC_1, A.CODE_2, C.CODE_DESC AS DESC_2
FROM TBLCODE A
JOIN TBLDESC B ON B.CODE1 = A.CODE_1
LEFT JOIN TBLDESC C ON C.CODE1 = A.CODE_2;
可能为null,则将它们设为CODE_1
。
如果您不想两次击中表格,可以使用单个外部联接,然后LEFT JOIN
来决定哪个去哪里,但是它有点乱;对于小型查找表,它可能不值得:
CASE