Если я правильно понимаю, вы хотите, чтобы value
из name
было задано специфично priority
, или value
было связано с NULL priority
. (Вы не обязательно хотите MAX(priority)
, который существует.)
Да, у вас есть некоторые неуклюжие проблемы с дизайном, которые вы должны решить, но давайте решим проблему, которая у вас есть в настоящее время (и вы можете позже перейти к проблеме, которая должна быть :)):
mysql> SET @priority = 1; -- the priority we want, if recorded
mysql> PREPARE stmt FROM "
SELECT
t0.*
FROM
t t0
LEFT JOIN
(SELECT DISTINCT name, priority FROM t WHERE priority = ?) t1
ON t0.name = t1.name
WHERE
t0.priority = t1.priority
OR
t1.priority IS NULL
";
mysql> EXECUTE stmt USING @priority;
+----+-------+--------+----------+
| id | name | value | priority |
+----+-------+--------+----------+
| 2 | name1 | valueX | 1 |
| 3 | name2 | value2 | NULL |
| 4 | name3 | value3 | NULL |
+----+-------+--------+----------+
3 rows in set (0.00 sec)
(Обратите внимание, что я изменил приоритетный value
для "name1" на "valueX" в вышеприведенном - ваша исходная формулировка имела идентичные значения value
для "name1" независимо от приоритета, что затрудняло для меня понять, почему вы старались отличать одно от другого.)