Я знаю, что подобные вопросы были заданы раньше, но я не видел их более чем для двух таблиц. И, похоже, есть разница.SQL EXISTS возвращает все строки, более двух таблиц
У меня есть три таблицы, из которых мне нужно поле, customers
где мне нужно customerID
и orderID
из, orders
из которого я получаю customerID
и orderID
и lineitems
, из которого я получаю orderID
и quantity
(= количество заказанного).
Я хочу, чтобы узнать, сколько клиентов купили более чем в 2 раза одного и того же элемента, так что в основном количество> 2 с:
SELECT COUNT(DISTINCT custID)
FROM customers
WHERE EXISTS(
SELECT *
FROM customers C, orders O, lineitems L
WHERE C.custID = O.custID AND O.orderID = L.orderID AND L.quantity > 2
);
Я не понимаю, почему она возвращается мне количество всех строк. Я сопоставляю подзапросы перед проверкой состояния> 2, не так ли?
Я новичок в SQL, поэтому я был бы благодарен, если бы вы могли объяснить это мне в корне, если это необходимо. Благодарю.
Таким образом, ошибка вызвана повторением клиентов снова? Или используется 'JOIN' вместо' FROM ... WHERE ... 'также имеет значение при использовании нескольких таблиц? – sandboxj
@sandboxj Да, ошибка связана с тем, что таблицы «клиенты» используются снова: она превосходит идею корреляции. Также предпочтительнее использовать современный синтаксис JOIN, как в предыдущем запросе, вместо синтаксиса старого стиля с разделенными запятыми таблицами. –