Внешнее соединение поможет в оракуле - PullRequest
0 голосов
/ 25 марта 2011

у меня есть:

select title, order#, STATE
from customers C, ORDERITEMS O, books b
where b.ISBN=O.ISBN (+)
order by title

Но я пытаюсь понять, почему строки, которые не имеют порядка #, имеют состояние

BODYBUILD IN 10 MINUTES A DAY   1003    CA
BODYBUILD IN 10 MINUTES A DAY   1003    WY
BODYBUILD IN 10 MINUTES A DAY   1003    TX
BODYBUILD IN 10 MINUTES A DAY   1003    NY
BODYBUILD IN 10 MINUTES A DAY   1003    WA
BODYBUILD IN 10 MINUTES A DAY   1003    ID
BODYBUILD IN 10 MINUTES A DAY   1003    FL
BUILDING A CAR WITH TOOTHPICKS  -   FL
BUILDING A CAR WITH TOOTHPICKS  -   NJ
BUILDING A CAR WITH TOOTHPICKS  -   GA
BUILDING A CAR WITH TOOTHPICKS  -   MI

Ответы [ 2 ]

4 голосов
/ 25 марта 2011

Мне гораздо проще использовать ANSI-соединения, если при выполнении внешних объединений задействовано более одной таблицы:

SELECT title, order#, STATE
FROM customers c 
   JOIN orderitems O ON o.customer_id = c.id
   LEFT JOIN books b ON b.isbn = o.isbn
ORDER BY title

(это по сути тот же запрос, что и Арджан, только со стандартным синтаксисом)

В зависимости от ваших потребностей, вы можете также использовать левое соединение для элементов заказа, например, если вы также хотите, чтобы клиенты не имели элементов заказа

Рекомендуется также использовать псевдоним таблицы для столбцов в списке выбора. Это упрощает понимание оператора (поскольку вы сразу узнаете, из какой таблицы и какой столбец), и оно более устойчиво к изменениям.

3 голосов
/ 25 марта 2011

Вы используете 3 таблицы, но только одно соединение. Это даст вам слишком много результатов. Вам понадобятся два объединения: возможно, что-то из таблицы Customer тоже нужно объединить с OrderItems.

Что-то вроде:

and o.customerId = c.id

Таким образом:

select b.title, o.order#, c.state
from customers c, orderitems o, books b
where o.customerId = c.id
and b.isbn = o.isbn (+)
order by title
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...