2016-01-18 5 views
0

Давайте этот образец данных:SQL: выбрать несколько различных столбцов из той же таблицы отдельно

+-------+---------+ 
| col1 | col2 | 
+-------+---------+ 
| 111 | hello | 
| 222 | hello | 
| 111 | blabla | 
| 444 | there | 
| 555 | blabla | 
| 555 | there | 
+-------+---------+ 

Мне нужен SQL возвращаются различные значения для каждого столбца отдельно (в качестве корма для значений раскрывающихся для фильтрации). Таким образом, результат должен быть:

+-------+---------+ 
| col1 | col2 | 
+-------+---------+ 
| 111 | hello | 
| 222 | blabla | 
| 444 | there | 
| 555 |   | 
+-------+---------+ 

Результаты не должны быть в этом формате; более важно, чтобы у меня были разные значения для легкого доступа и итерации.

Ближайший я получил отсюда: https://stackoverflow.com/a/12188117/169252

select (SELECT group_concat(DISTINCT col1) FROM testtable) as col1, (SELECT group_concat(DISTINCT col2) FROM testtable) as col2; 

Это возвращает:

+-----------------+-------------------+ 
| col1   | col2    | 
+-----------------+-------------------+ 
| 111,222,444,555 | velo,hallo,blabla | 
+-----------------+-------------------+ 

Это довольно близко, и я выберу этот, если не лучшее решение не приходит; это не оптимально, поскольку значения разделены запятой, и мне нужно разделить результаты.

Я также попытался:

SELECT DISTINCT from col1,col2 FROM testtable; 

Это возвращает значения distint обеих колонок, а не то, что я хочу.

также:

select col1,col2 from testtable group by col1,col2; 

, который был предложен в другом месте не возвращает то, что мне нужно, но возвращает каждый столбец-отчетливый :)

+1

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

+0

Для меня очевидно, что я могу сделать два отдельных запроса DISTINCT, но мне интересно, для производительности, если это возможно сделать в одном запросе? – faboolous

+0

Лучший способ - сделать два запроса. Это было бы намного быстрее, чем при анализе результата group_concat – Evgeny

ответ

2

Одна из проблем с тем, что вы просите, заключается в том, что вы ожидаете, что результат не будет иметь никакого смысла с точки зрения реляционной базы данных. Каждый столбец в строке данных должен иметь отношение к другим столбцам в строке.

Лучший способ приблизиться к этому, ИМО, является возвращение двух наборов результатов и обработать каждый из них для каждого из ваших выпадающего коробки:

SELECT DISTINCT column_1 FROM My_Table 

и

SELECT DISTINCT column_2 FROM My_Table 

Я также посмотрите, почему у вас есть эти данные в одной и той же таблице, если они не связаны друг с другом. Если они связаны друг с другом, и вы пытаетесь вывести этот столбец для одного столбца, который затем фильтрует элементы во втором раскрывающемся списке, вам действительно нужно вернуть полный набор строк и позволить вашему внешнему приложению обработать фильтрацию (и отображение уникальные результаты). Большинство выпадающих виджетов должны допускать такую ​​привязку.

+0

Да, я знал, что два столбца в наборе результатов, как показано в моем вопросе, на самом деле не согласуются со стандартным мышлением RDMS. Тогда я буду использовать два разных запроса. – faboolous

-1

Try

Select (SELECT DISTINCT col1 from testtable) AS col1, (SELECT DISTINCT col2 from testtable) AS col2; 

Я думаю, group_concat помещает запятые в возвращенную таблицу.

+0

Вы пробовали это? –

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