2011-01-25 2 views
2

Мне интересно, можем ли мы сделать этот запрос ниже?Включить строку в Select Query

SELECT America, England, DISTINCT (country) FROM tb_country 

, который будет (мое намерение состоит в том, чтобы) Дисплей:

America 
England 
(List of distinct country field in tb_country) 

Так дело в том, чтобы отобразить (например) Америка и Англия, даже если DISTINCT поле страны ничего не возвращает. В основном мне нужен этот запрос, чтобы отобразить выпадающее меню, и дать некоторые липкие значения, которые пользователь может выбрать, позволяя себе добавлять новую страну по своему усмотрению.

Также само собой разумеется, что если одна строка в tb_country имеет значение America или England, они не будут отображаться как дубликат в результате запроса. Так что, если tb_country имеет список значений:

Germany 
England 
Holland 

Запрос будет только выход:

America 
England 
Germany 
Holland 

ответ

7

Вы должны использовать UNION:

SELECT 'America' AS country 
UNION 
SELECT 'England' AS country 
UNION 
SELECT DISTINCT(c.country) AS country 
    FROM TB_COUNTRY c 

UNION удалит дубликаты; UNION ALL не будет (но быстрее для него).

Тип данных должен соответствовать каждому порядковому положению в предложении SELECT. Значение, если первым столбцом в первом запросе был INT, первый столбец для всех объединенных операторов впоследствии должен быть INT, а также NULL.

+0

есть ли другой способ? Запрос будет очень длинным, если я должен перечислить 10-20 липких значений таким образом. Если нет другого пути, я буду использовать ваше предложение. Спасибо – Henson

+0

@ Хенсон: Лучшим вариантом для этой ситуации является наличие таблицы стран, в которой содержится уникальный список стран. Затем укажите первичный ключ, например country_id, где вам нужна информация о стране в других таблицах. –

+0

Да, я обычно делаю это тоже. Но клиент настаивает на этом: (странно ... – Henson

0

Почему вы не добавляете колонку веса в tb_country и использовать пункт заказа:

Выполнить один раз:

update country set weight = 1 where country = 'England'; 
update country set weight = 1 where country = 'America'; 

Затем использовать:

select distinct(country) from tb_country order by desc weight ; 

Другой способ заключается в использовании дополнительную таблицу стран с двумя колонками (страна, вес) и внешнее соединение.

Personnaly Я предпочитаю таблицу стран с УНИКАЛЬНЫМ ограничением для поля страны и Использование внешнего ключа.