2017-02-19 27 views
0

Я хотел знать, можно ли моделировать LEFT JOIN без использования JOINs.Имитировать ЛЕВЫЙ ПРИСОЕДИНЕНИЕ без использования JOIN

Я использую this database и попытаться смоделировать JOIN с SELECT

FROM Customers 
LEFT JOIN Orders 
ON Customers.CustomerID=Orders.CustomerID 
ORDER BY Customers.CustomerName; 

В настоящее время я нахожусь только в состоянии получить INNER JOIN. Это мой текущий запрос:

SELECT Customers.CustomerName, Orders.OrderID 
FROM Customers, Orders 
WHERE Customers.CustomerID=Orders.CustomerID 
ORDER BY CustomerName; 
+1

Вы понимаете, что ваш SQL запрос выше еще РЕГИСТРИРУЙТЕСЬ просто с помощью ',' оператор ? – ultrajohn

+0

@ultrajohn Первый запрос - это соединение, которое я хочу преобразовать в запрос с отсутствием соединения –

+0

Оба запроса имеют объединения – Strawberry

ответ

2

Вы можете добавить левый анти-присоединиться запрос, скажем:

SELECT Customers.CustomerName, Orders.OrderID 
FROM Customers, Orders 
WHERE Customers.CustomerID=Orders.CustomerID 
ORDER BY CustomerName 

UNION 

SELECT Customers.CustomerName, NULL FROM Customers 
    WHERE Customers.CustomerID NOT IN (SELECT CustomerID FROM Orders); 
+0

В SQL, UNION ALL может быть лучшим выбором для получения точной эквивалентности. Также стоит упомянуть, что ваше решение точно соответствует определению реляционной алгебры LEFT JOIN: https://en.wikipedia.org/wiki/Relational_algebra#Left_outer_join_.28.E2.9F.95.29 –

+0

Если вы думаете об этом, то в этой задаче , UNION даст тот же результат, что и UNION ALL. – ultrajohn

+0

@ultrajohn Спасибо вам большое! –

 Смежные вопросы

  • Нет связанных вопросов^_^