我们假设我们有表登录:
id| name | lastname
---------------------
1 | mark | johnson
2 | jack | sparrow
3 | bruno | mark
我们都知道,我们可以查询类似于SELECT name FROM login WHERE id = 1;
的SQL并获取mark
。
我正在寻找类似的查询:
SELECT column_name FROM logins WHERE value = 'mark';
将导致name, lastname
甚至
SELECT column_name FROM logins WHERE value = 'mark' AND id = 1;
将导致name
。
编辑:问题比简单的答案更复杂。真正的问题是当我们知道预期值时,如何从100多列中选择列名。例如,我们知道表格中的某个地方有值17,58
,但我们想找到列名。
答案 0 :(得分:1)
无法直接获取列名称,但是使用case语句可以构造查询以返回匹配值的列名称
select
id,
case
when name = 'mark' then 'name'
when lastname = 'mark' then 'lastname'
else 'Nothing'
end as column_name
from logins
<强> DEMO 强>
答案 1 :(得分:0)
在PostgreSQL中你可以使用hstore extension(我不认为MySQL中有类似的东西可用):
with login_data as (
select id,
skeys(hstore(l)) as column_name,
svals(hstore(l)) as column_value
from logins as l
where avals(hstore(l)) @> array['mark']
)
select id, column_name
from login_data
where column_value = 'mark'
;
SQLFiddle示例:http://sqlfiddle.com/#!15/115d5/1
但表演很可能会非常糟糕。
答案 2 :(得分:-1)
如果你想在(姓名)或(姓氏)中输入标记 我认为这会对你有帮助
SELECT column_name FROM logins WHERE ( name = 'mark' Or lastname = 'mark') AND id = 1;
答案 3 :(得分:-1)
如果您不知道用户的身份,请执行以下操作:
SELECT DISTINCT name FROM logins WHERE name = 'mark';