2014-10-28 3 views
0

Давайте предположим, что мы имеем таблицу логинов:Inverse SQL: SELECT column_name WHERE значение

id| name | lastname 
--------------------- 
1 | mark | johnson 
2 | jack | sparrow 
3 | bruno | mark 

Мы все знаем, что мы можем запросить SQL похож на: SELECT name FROM login WHERE id = 1; и получить взамен mark.

Я ищу запрос как:

SELECT column_name FROM logins WHERE value = 'mark'; 

, что приведет к name, lastname или даже

SELECT column_name FROM logins WHERE value = 'mark' AND id = 1; 

, что приведет к name.

EDIT: Вопрос более сложный, чем простые ответы. Реальная проблема заключается в том, как выбрать имя столбца из 100 + столбцов, когда мы знаем ожидаемое значение. Например, мы знаем, что где-то в таблице есть значение 17,58, но мы хотим найти имя столбца.

+2

Я не понял вашу проблему. Можете ли вы дать более подробное объяснение своей проблемы? –

+0

MySQL/PostgreSQL? – Raptor

+0

Пожалуйста, объясните свой вопрос. Я не могу понять это ясно. –

ответ

-1

, если вы хотите, чтобы получить знак, если имя в (имя) Или (LastName) ид думаю, что это поможет Вам

SELECT column_name FROM logins WHERE (name = 'mark' Or lastname = 'mark') AND id = 1; 
+0

это не имеет смысла.Если 'id = 1' находится в разделе WHERE, вам не нужно искать по именам. – Raptor

1

Получение имя столбца непосредственно не представляется возможным, однако с помощью оператора выбора вы можете построить запрос, возвращающий имя столбца для значения то, как согласованный

select 
id, 
case 
when name = 'mark' then 'name' 
when lastname = 'mark' then 'lastname' 
else 'Nothing' 
end as column_name 
from logins 

DEMO

+0

В этом случае мы можем просто удалить блок «Ничто» и добавив, где в конце, «где name =« mark »или lastname = 'mark'' –

-1

Что-то вроде этого, если вы не знаете идентификатор пользователя:

SELECT DISTINCT name FROM logins WHERE name = 'mark'; 
+1

Это не имеет никакого смысла. – Wampirue

+2

То, что вы написали в вопросе, имеет смысл !? – Wolf87

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

Но производительность, скорее всего, будет довольно ужасно.

Смежные вопросы