2017-02-19 9 views
0

JOINsを使用せずにLEFT JOINをシミュレートできるかどうかを知りたいと思っていました。LEFT JOINをJOINを使用せずにシミュレート

私はthis databaseを使用して、私は現在、唯一のINNER JOIN取得することができています。このJOIN

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

SELECTでシミュレートしてみてください。これは私の現在のクエリです:

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

あなたは上記のSQLクエリは、単に ''演算子を使用して、まだ、JOINであることを認識しません? – 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ありがとうございました! –