select distinct
res = case when ref > 0 then ref else id end
from
MyTable
where
ok = 1
Возможен такой запрос?
Таблица содержит поля: id, name, ref, ok. (все поля int, кроме name)
Необходимо выбрать из таблицы 10 строк при условии:
1) поле ок = 1;
2) если поле ref = 0, то в результат нужно содержимое поля id;
3) если поле ref > 0, то в результат нужно содержимое поля ref;
4) числа в результате должны быть уникальными.
Спасибо.
возможно!
Спасибо, подскажите пожалуйста реализацию для mySQL
Код:
По-моему конструкция case есть и в MySQL, синтаксис уточните в документации, в целом идея такая.
Код:
SELECT DISTINCT
if (ref = 0, id, ref) AS rez
FROM
MyTable
WHERE ok = 1
if (ref = 0, id, ref) AS rez
FROM
MyTable
WHERE ok = 1
но помимо rez еще необходимо получить значение поля name, а оно уникальное у всех строк. То есть запрос
Код:
SELECT DISTINCT
if(ref = 0, id, ref) AS rez, name
FROM
MyTable
WHERE ok = 1
if(ref = 0, id, ref) AS rez, name
FROM
MyTable
WHERE ok = 1
не решает задачу. В результат попадают все строки таблицы.
Как поправить запрос, чтоб в результат попадали еще и имена уникальных чисел? Пример:
id - name - ref - ok
1 - Ivan - 0 - 1
2 - Nikita - 0 - 0
3 - Katrin - 2 - 1
4 - Nata - 1 - 0
5 - Slava - 4 - 1
результат:
rez - name
1 - Ivan
2 - Nikita
4 - Nata
Первый пример кода возвращает только числа: 1,2,4
Спасибо.
Код:
SELECT * FROM `mytable` WHERE `id` IN (
SELECT DISTINCT IF( `ref` =0, `id`, `ref`) AS `rez`
FROM `mytable`
WHERE `ok` =1
)
SELECT DISTINCT IF( `ref` =0, `id`, `ref`) AS `rez`
FROM `mytable`
WHERE `ok` =1
)