【发布时间】:2012-07-03 09:29:15
【问题描述】:
我正在尝试构建一个 SQL 语句,该语句从位于同一个表中的多个列返回唯一的非空值。
SELECT distinct tbl_data.code_1 FROM tbl_data
WHERE tbl_data.code_1 is not null
UNION
SELECT tbl_data.code_2 FROM tbl_data
WHERE tbl_data.code_2 is not null;
例如tbl_data如下:
id code_1 code_2
--- -------- ----------
1 AB BC
2 BC
3 DE EF
4 BC
对于上表,SQL查询应该返回两列中所有唯一的非空值,即:AB、BC、DE、EF。
我对 SQL 还很陌生。我上面的语句有效,但是有没有更简洁的方法来编写这个 SQL 语句,因为列来自同一个表?
【问题讨论】:
-
那个表结构让我感觉你的数据库没有标准化......
-
您不需要在第一个查询中使用
distinct-union会为您完成。 -
@gdoron:这些代码对应于各种名称,实际上可能会重复,即特定记录可能具有代码 1 和 2 的 BC 和 BC。代码 1 与 2 的指定也很重要。有用于各种代码的第三个查表表。不是最好的,但这就是我正在处理的问题。
-
@regulus 我用您查询的执行计划更新了我的答案,以便您进行比较。