我在数据库中有两个表:Artist和Filter。有没有办法在单个SQL 语句中根据Filter的子查询结果查询Artist的列?
伪代码:
SELECT (SELECT ColumnName FROM Filter WHERE ShowColumn=1) FROM Artist
- 艺术家
------------------------------------------ | 编号 | 名字 | 姓氏 | 类型 | ------------------------------------------ | 1 | 约翰 | 科尔特兰 | 爵士乐 | | 2 | 几米 | 亨德里克斯 | 摇滚 | | 3 | 乌尔里希 | 施瑙斯 | 电子 | ------------------------------------------
- 筛选
-------------------------------- | 编号 | 列名 | 显示栏 | -------------------------------- | 1 | 名字 | 1 | | 2 | 姓氏 | 0 | | 3 | 类型 | 1 | --------------------------------
- 预期成绩
------------------------------------------- | 编号 | 名字 | 类型 | ------------------------------------------- | 1 | 约翰 | 爵士乐 | | 2 | 几米 | 摇滚 | | 3 | 乌尔里希 | 电子 | -------------------------------------------
我能拥有的最好的方法是使用 multiple 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