首页 > 解决方案 > 如果我使用 SELECT WHERE 查找数据,如何返回数据所在的列名?

问题描述

我什至不确定从 SELECT 查询本身从哪里开始,但想象一下我有一个下表:

ID   Environment  Position1  Position2   Position3
1    Operations   Tech       Survey      Phone
2    Warehouse    Stocker    Maintenance Trucker
3    Office       Logger     Janitor

当我搜索特定职位名称但我需要知道它在哪一列下时,我将如何执行 SELECT 查询来给我列名?

例子:

SELECT columnname 
FROM table 
WHERE Position1 = 'Janitor' OR Position2 = 'Janitor' OR Position3 = 'Janitor'

我不知道是否有更好的方法可以做到这一点,但这个想法是每个用户都被分配了 Position1-3 和一个环境。如果它们被移动到另一个环境,它们会保留 Position#,但它的标签会发生变化。

这些数据是虚假的,老实说更令人困惑,因为我不想泄露真实数据。有可能我的桌子设置不好。

标签: javascriptsqlite

解决方案


使用CASE表达式。

SELECT CASE 'Janitor'
        WHEN Position1 THEN 'Position1'
        WHEN Position2 THEN 'Position2'
        ELSE 'Position3'
    END AS columnname
FROM table
WHERE 'Janitor' IN (Position1, Position2, Position3)

但是最好使用这样的表格来规范化您的数据。table1_id是原始表的外键。

table1_id   PositionNum Position
1           1           Tech
1           2           Survey
1           3           Phone
2           1           Stocker
2           2           Maintenance
2           3           Trucker
3           1           Logger
3           2           Janitor

SELECT PositionNum
FROM thisTable
WHERE Position = 'Janitor'

推荐阅读