a.id in ( SELECT `sender` FROM matches WHERE status = 1)
OR a.id NOT IN ( SELECT `sender` FROM matches
UNION ALL SELECT `receiver` FROM matches )
Первая часть ИЛИ получает идентификаторы отправителей, следовательно, идентификаторы 1 и 6.
Но вторая часть еще более инкриминирует.
SELECT `sender` FROM matches -- 1,2,2,3, 6
UNION ALL
SELECT `receiver` FROM matches -- 1, 3,4,5,6
UNION ALL
равно 1,1,2,2,3,3,4,5,6,6.
Пары игнорируются.
Между тем, a.id является некоторым подмножеством 1,2,3,4,5,6,7, в зависимости от арифметического расстояния c. Следовательно, единственный a.id, оставшийся от второй части OR
, - это 7
.
Итак, я ожидаю получить 1, 6 и, возможно, 7.
Хммм. .. Я думаю, что я заблудился, и я думаю, что вы заблудились. Пожалуйста, измените вещи так, чтобы не было двух ids
, а 4 значений 1
. 1
как status
, 1
как отправитель / получатель, 1
как два разных ids
. Например, сделайте match.id между 11 и 16; сделать все отправители / получатели между 21 и 27. Сделать статусы ON
и OFF
(или что-то).