Как с работой. Мой вложенный запрос возвращает только 3 кортежа. Но в сочетании с внешним запросом он (внешний запрос) возвращает 736 кортежей. И это то же самое количество кортежей, если я напишу запрос, скажем, выберите p.height from ... где True.
Я читаю книги, в которых говорится, что это только возвращает истину, что имеет смысл в моем случае. Также прочитайте несколько онлайн-статей, где существует возвращает True, но внешний запрос выбирает только из результатов вложенного запроса.
MySQL - верстак
select p.height
from world_cup.player as p
where Exists(select q.height from world_cup.player as q where q.height = 165)
order by p.height;
Фактическим результатом должны были стать эти три кортежа 165, 165, 165 (по данным книги и интернет-ресурсов)
2 ответа
Да, я должен проверить себя, и то, что вы сказали, правильно. Однако по ссылке, на которую вы ссылаетесь здесь, https://www.w3schools.com/sql/ sql_exists.asp, вам не хватает одного условия, при котором вам нужно иметь p.height=q.height
перед q.height=165
для правильного возврата значений. Следовательно, ваш запрос должен быть таким:
SELECT p.height
FROM world_cup.player AS p
WHERE EXISTS (
SELECT q.height FROM world_cup.player AS q
WHERE p.height=q.height -- you're missing this condition
AND q.height = 165
)
ORDER BY p.height;
Вот ссылка: https: //dev.mysql. ком / DOC / RefMan / 8.0 / о / существует - и - не - существует - subqueries.html
"Для предыдущего примера, если t2 содержит какие-либо строки, даже строки, содержащие только значения NULL, условие EXISTS имеет значение TRUE."
EXISTS
имеет значение true, если и только если подзапрос возвращает хотя бы один кортеж.
Таким образом, пока есть хотя бы один игрок ростом 165, ваш EXISTS
возвращает true для всех кортежей внешнего запроса. Если такого игрока не было, то в результате вы получили пустой сет. Таким образом, вы видите, что ваше использование довольно статично и, возможно, не имеет смысла использовать его таким образом, если только это не то, что вы намеревались.
Обычно подзапрос к EXISTS
коррелируется, то есть значение внешнего запроса появляется в предложении WHERE
внутреннего запроса, так что результаты EXISTS
могут различаться от кортежа к кортежу внешнего запроса.
Если вам нужен игрок с ростом 165, просто используйте выражение равенства в предложении WHERE
.
SELECT p.height
FROM world_cup.player as p
WHERE p.height = 165;
ORDER BY p.height
тоже бесполезен, так как они все одинаковые.
Похожие вопросы
Новые вопросы
mysql
MySQL - это бесплатная система управления реляционными базами данных с открытым исходным кодом (RDBMS), использующая язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. Д. Это разные БД, которые все используют свои собственные диалекты SQL для управления данными.