У меня есть подзапрос запроса ниже (Цель поиска - поиск 2 лучших заказов из таблицы заказов, у которых freight_charges = 2 и получение клиентов этих заказов)
- Рабочий запрос с предложением IN
SELECT *
FROM Customers C
WHERE C.CUST_ID IN (
SELECT TOP 2 CUST_ID
FROM Orders O
where FREIGHT_CHARGES = 2
)
Однако я хочу преобразовать предложение IN в более эффективное предложение EXISTS
Код не работает с существующим предложением
SELECT *
FROM Customers C
WHERE EXISTS (
SELECT TOP 2 CUST_ID
FROM Orders O
where FREIGHT_CHARGES = 2 AND C.CUST_ID = O.CUST_ID
)
В случае второго запроса я не получаю верхние 2 cust_id, НО все записи.
Пожалуйста, дайте мне знать любую реализацию, чтобы получить желаемый результат.
Отредактировано: Использование INNER JOIN, как предлагается в ответах. Я могу получить правильный результат. Однако, поскольку я не хочу извлекать какие-либо записи из таблицы Orders, я подумал, что существует лучший подход к производительности.
SELECT C.*
FROM Customers C
INNER JOIN (
SELECT TOP 2 CUST_ID
FROM Orders
where FREIGHT_CHARGES = 2
) O ON C.CUST_ID=O.CUST_ID