【发布时间】:2013-10-11 16:44:40
【问题描述】:
我在数据库中有两个表:Artist 和 Filter。有没有办法在单个 SQL 语句中根据Filter 的子查询结果查询Artist 的列?
伪代码:
SELECT (SELECT ColumnName FROM Filter WHERE ShowColumn=1) FROM Artist
- 艺术家
- 过滤器
- 预期结果
我能做到的最好的就是使用多个CASE..WHEN,但它不是那么优雅,而且还有一些额外烦人的NULL字段。
SELECT
CASE WHEN (SELECT ShowColumn FROM Filter WHERE ColumnName='FirstName') THEN FirstName END,
CASE WHEN (SELECT ShowColumn FROM Filter WHERE ColumnName='LastName') THEN LastName END,
CASE WHEN (SELECT ShowColumn FROM Filter WHERE ColumnName='Genre') THEN Genre END
FROM Artist
【问题讨论】:
-
你正在尝试的感觉不对。
Filter到底是为了什么?SELECT id, FirstName, Genre FROM Artist;应该会给出你期望的结果。 -
您似乎在动态构建 SQL 查询。这不应该是另一种编程语言的任务吗?例如:PHP/Java/C#?
-
你做了一个动态查询'。
-
@MostyMostacho 同意。我只是想知道是否有办法一次完成。
-
在您的情况下,我最好的解决方案是依靠
NULL列向右。并且不会正确分配列名。这种过滤通常由更高级别的应用程序完成。