+------+---------+-------+
| id | name | prefer|
+------+---------+-------+
| 11 | Ivan | null |
+------+---------+-------+
| 12 | Petr | 1 |
+------+---------+-------+
| 12 |Petruccio| null |
+------+---------+-------+
выбираем имя по имеющемуся списку ид. если есть одинаковые ид надо брать имя у которого prefer=1. если ид уникален то у него prefer null - то есть простое условие where prefer IS NOT NULL - не прокатит.
SELECT * FROM mytable
WHERE id = 12
ORDER BY prefer DESC
LIMIT 1
http://sqlfiddle.com/#!9/0116e7/1/0
SELECT *
FROM table
WHERE (id,COALESCE(prefer, -1)) IN ( SELECT id, MAX(COALESCE(prefer, -1))
FROM table
GROUP BY id
);
select id, ifnull(max(if(prefer=1,name,NULL)), max(name))
from tabPref
group by id
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости