Почему запрос соединения дает другой результат, чем подзапрос?

Я изучаю PostgreSQL и работаю с базой данных Northwind

Сейчас я тестирую JOIN и подзапрос с ANY
Я хочу выбрать все product_name, из которых было заказано ровно 10 (столбец quantity из order_details)
Итак, у меня есть 2 разных запроса:

SELECT product_name FROM products
WHERE product_id = ANY(
    SELECT product_id FROM order_details
    WHERE quantity = 10
) 

а также

SELECT products.product_name FROM products
JOIN order_details ON order_details.product_id = products.product_id
WHERE order_details.quantity = 10

Но они дают разные результаты!
Первый дает: Всего 60 строк
А второй дает: 181 строка

Почему так и какой результат правильный?


person Leniork    schedule 04.03.2021    source источник
comment
Они возвращают разное количество строк между совершенно разными запросами.   -  person a_horse_with_no_name    schedule 04.03.2021


Ответы (1)


Первый запрос выведет каждую products строку не более одного раза.

Второй запрос может иметь несколько строк результатов для одной строки products: по одной для каждой соответствующей строки order_details.

Какой из запросов лучше, зависит от ваших требований.

person Laurenz Albe    schedule 04.03.2021