SQL / SQlite: добавление столбца в операторе выбора на основе значения другого столбца - PullRequest
0 голосов
/ 22 июня 2011

У меня есть таблица со столбцами word, length, position, count and definition.Я хочу сделать выбор из word и definition, но просто сохранив определение некоторых слов (на основе условия более position, count и length), а остальные определения заменят их пустымиstring.

Я делаю следующий запрос:

SELECT word,definition FROM (SELECT word, definition, position, count FROM words 
WHERE position = 5000 AND count < 5 AND length <= 6
AND definition IS NOT NULL
UNION ALL
SELECT word, "" AS definition, position, count FROM words)
ORDER BY position ASC, count DESC

Но я получаю дублированные значения в слове столбца.
Как получить это без дублированных значений?

Ответы [ 4 ]

1 голос
/ 22 июня 2011

Добавить обратное предложение WHERE ко второму набору?

SELECT word,definition FROM
(
  SELECT word, definition, position, count FROM words 
  WHERE position = 5000 AND count < 5 AND length <= 6
  AND definition IS NOT NULL
UNION ALL
  SELECT word, "" AS definition, position, count FROM words
  WHERE NOT (position = 5000 AND count < 5 AND length <= 6
             AND definition IS NOT NULL)
)
ORDER BY position ASC, count DESC
0 голосов
/ 23 июня 2011

Использование UNION SELECT кажется бесполезным в вашем случае. Кажется, вы хотите инициализировать столбец определения только тогда, когда он равен NULL. Определение - это только часть ваших результатов.

Используйте ifnull для инициализации определения:

SELECT word, IFNULL(definition,"") FROM words 
  WHERE position = 5000 AND count < 5 AND length <= 6
ORDER BY position ASC, count DESC

IFNULL вернет определение, если определение не NULL и "" в противном случае.

Документация по SQLITE ISNULL http://www.sqlite.org/lang_corefunc.html

MYSQL IsNULL Документация: http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_ifnull

0 голосов
/ 22 июня 2011

Вы можете использовать группу по предложению ....

0 голосов
/ 22 июня 2011

A SELECT DISTINCT, кажется, решает вашу проблему.

http://www.w3schools.com/sql/sql_distinct.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...