2015-06-01 2 views
-1

Я проходил пример LEFT JOIN на w3schools.com. http://www.w3schools.com/sql/sql_join_left.aspСлева Присоединиться к Oracle SQL

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

выше запрос вернет мне все клиентов без заказов, NULL Заказать ID + Все клиенты, имеющие заказы с их заказом Идентификаторы

Как я должен изменить этот запрос так, чтобы он возвращал все клиентов без Заказы + Все клиенты, имеющие заказы с датой заказа как '1996-09-18'

Заранее спасибо.

+0

Клиенты, не имеющие заказов на эту дату; или без каких-либо заказов, в любую дату? В любом случае, как вы пытались его решить? –

ответ

1

Если вы хотите, чтобы клиенты с не заказов и те с определенной даты заказа, то вы хотите WHERE пункт:

SELECT c.CustomerName, o.OrderID 
FROM Customers c LEFT JOIN 
    Orders o 
    ON c.CustomerID = o.CustomerID 
WHERE (o.CustomerID is NULL) OR (o.OrderDate = DATE '1996-09-18) 
ORDER BY c.CustomerName; 

Если вы хотите всех клиентов с их порядком на эту дату (если у них есть один), то вы бы переместить условие в п ON:

SELECT c.CustomerName, o.OrderID 
FROM Customers c LEFT JOIN 
    Orders o 
    ON c.CustomerID = o.CustomerID AND o.OrderDate = DATE '1996-09-18 
ORDER BY c.CustomerName; 

Обратите внимание на различие: первые фильтры клиентов. Второй влияет только на то, какой порядок будет показан (и часто будет отображаться NULL).

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