Проблемы с пониманием этого запроса EXISTS
Таблица acc_account
Пример данных:
acc_id acc_code parent name
------- --------- ------ ------
1 | aaa | -1 | A |
2 | bbb | CP | B |
3 | ccc | OP | C |
4 | ddd | -1 | D |
Колонны acc_code
а также parent
не равны верно?
В таблице 411 строк, и даже нет записей acc_code
это соответствует parent
колонка.
Однако этот запрос ниже возвращает 6 строк, когда должно быть все 411 строк. Кто-нибудь может объяснить?
Запрос (возвращает 6 строк):
SELECT *
FROM acc_account a1
WHERE not EXISTS (
SELECT *
FROM acc_account
WHERE acc_account.parent = a1.acc_code
);
1 ответ
Решение
Допустим, вы получили следующий набор:
acc_id acc_code parent name
------- --------- ------ ------
1 | aaa | -1 | A |
2 | bbb | CP | B |
3 | ccc | OP | C |
4 | ddd | -1 | D |
5 | CP | -1 | E |
Ваш запрос вернет запись с acc_id
= 5, потому что acc_code
= CP существует как parent
в записи с acc_id
= 2
Для поиска в записи вы можете изменить свой запрос следующим образом:
SELECT *
FROM acc_account a1
WHERE not EXISTS (
SELECT *
FROM acc_account
WHERE acc_account.parent = a1.acc_code
AND acc_account.id = a1.id
);
Или намного проще:
SELECT *
FROM acc_account a1
WHERE a1.parent = a1.acc_code
Я только что заметил, что вы ищете NOT exists
Таким образом, логика, описанная здесь, наоборот.