Я пытаюсь отфильтровать строки из результатов объединенного запроса select, которые имеют одинаковое значение столбца id_user, но имеют более низкий приоритет сортировки. Столбец sort1 имеет наивысший приоритет, а sort4 - самый низкий. Имя столбца задает приоритет, а не значение внутри.
Пользователи таблицы:
CREATE TABLE `users` (
`user_id` int(11) NOT NULL,
`name` varchar(30) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `users` (`user_id`, `name`) VALUES
(1, 'Some Name'),
(2, 'Some Other Name');
ALTER TABLE `users`
ADD PRIMARY KEY (`user_id`);
Элементы таблицы:
CREATE TABLE `items` (
`id_user` int(11) NOT NULL,
`sort1` int(11) DEFAULT NULL,
`sort2` int(11) DEFAULT NULL,
`sort3` int(11) DEFAULT NULL,
`sort4` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `items` (`id_user`, `sort1`, `sort2`, `sort3`, `sort4`) VALUES
(1, NULL, NULL, 39, NULL),
(2, NULL, NULL, NULL, 45),
(1, NULL, 34, NULL, NULL);
Я попробовал выполнить следующий запрос и получил больше результатов, чем мне нужно:
SELECT
users.name,
items.id_user,
items.sort1,
items.sort2,
items.sort3,
items.sort4
FROM
items
LEFT JOIN users ON items.id_user = users.user_id
WHERE
(
items.sort1 = '' OR items.sort1 IS NULL
) AND(
items.sort2 = 34 OR items.sort2 IS NULL
) AND(
items.sort3 = 39 OR items.sort3 IS NULL
) AND(
items.sort4 = 45 OR items.sort4 IS NULL
)
Фактический результат:
| Name | id_user | sort1 | sort2 | sort3 | sort4 |
+-----------------+---------+-------+-------+-------+-------|
| Some Name | 1 | NULL | NULL | 39 | NULL |
| Some Other Name | 2 | NULL | NULL | NULL | 45 |
| Some Name | 1 | NULL | 34 | NULL | NULL |
Первая строка дополнительный результат, потому что третья строка имеет более высокий приоритет (sort2).
Ожидаемый результат:
| Name | id_user | sort1 | sort2 | sort3 | sort4 |
+-----------------+---------+-------+-------+-------+-------|
| Some Name | 1 | NULL | 34 | NULL | NULL |
| Some Other Name | 2 | NULL | NULL | NULL | 45 |
Я также пробовал столбцы приоритета GROUP BY id_user и ORDER BY, но я не получил ожидаемого результат