Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Логическая ошибка в запросе связана с id?  [new]
Edmon
Member

Откуда:
Сообщений: 65
SELECT * FROM players;
+----+--------------+
| id | name |
+----+--------------+
| 1 | Иванов И. |
| 2 | Иванова А. |
| 3 | Сидорова А. |
| 4 | Петров П. |
| 5 | Кузнецова С. |
+----+--------------+

SELECT * FROM games;
+----+----------------+-----------+
| id | event |id_winner |
+----+----------------+-----------+
| 1 | Бег 1км | 2 |
| 2 | Плавание 100м | 3 |
| 3 | Велозабег | 2 |
| 4 | Шахматы | NULL |
+----+----------------+-----------+

Итак есть две таблицы, и следующий запрос:
SELECT * FROM players WHERE id NOT IN (SELECT id_winner FROM games)

Как я понимаю данный запрос должен выводить всех спортсменов из первой таблицы, которых нету во второй. И логическая ошибка связана с некорректным связыванием этих двух таблиц с помощью графы id?
13 окт 16, 01:20    [19776136]     Ответить | Цитировать Сообщить модератору
 Re: Логическая ошибка в запросе связана с id?  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18399
проблема связана с тем, что в обычной трехзначной логике оператор not in (множество) не может вернуть "истина", если в множестве присутствует хотя бы один NULL.
Попробуйте так:
SELECT * FROM players 
WHERE id NOT IN (SELECT id_winner FROM games
where id_winner is not null
)
13 окт 16, 01:55    [19776170]     Ответить | Цитировать Сообщить модератору
 Re: Логическая ошибка в запросе связана с id?  [new]
Edmon
Member

Откуда:
Сообщений: 65
А как осуществляется связь между таблицами? Через поле id и id_winner?
13 окт 16, 14:08    [19777789]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить