Oracle SQL developer, как отобразить значение NULL внешнего ключа - PullRequest
0 голосов
/ 28 марта 2012

Я попытаюсь использовать левое внешнее соединение между билетом и членством.Однако он не отображает внешний ключ со значениями NULL в Ticket.Не могли бы вы дать мне ответ на этот вопрос, что не так с этим запросом?Спасибо.

FROM Ticket t, Production pro, Performance per, Price, Price_level, Booking, Customer, Customer_Concession ccons, Membership, Member_concession mcons
WHERE t.performanceid = per.performanceid AND
  t.PRODUCTIONID = Price.PRODUCTIONID AND
  t.levelId = Price.levelId AND
  Price.PRODUCTIONID = pro.PRODUCTIONID AND
  Price.levelId = Price_level.levelId AND
  Booking.bookingId (+) = t.bookingId AND
  Customer.customerId = Booking.customerId AND
  ccons.cConcessionId (+) = Customer.cConcessionId AND  
  Membership.membershipId (+) = t.membershipId AND
  Membership.mConcessionId = mcons.mConcessionId 
ORDER BY t.ticketId

Ответы [ 2 ]

4 голосов
/ 28 марта 2012

Одна из ваших потенциальных проблем - это два условия:

  Booking.bookingId (+) = t.bookingId AND
  Customer.customerId = Booking.customerId AND

Поскольку вы выполняете внешнее соединение с Booking, его столбцы будут отображаться как NULL, если совпадений не найдено; но затем вы выполняете обычное соединение с Customer, поэтому эти строки будут удалены, поскольку NULL не может быть равным чему-либо. Вы можете также изменить вторую строку на внешнее соединение.

Но я не знаю, является ли это вашей основной проблемой, поскольку я не совсем понимаю, о чем вы спрашиваете. Что вы имеете в виду под значением NULL внешнего ключа? Вы не указали, какие у вас внешние ключи.

1 голос
/ 28 марта 2012

Чтобы подробнее остановиться на наблюдениях Дейва и привести пример синтаксиса SQL92, пожалуйста, изучите его и отойдите от собственного синтаксиса внешнего соединения Oracle.

FROM
TICKET t
JOIN Performance per
ON per.performance_id = t.performance_id
JOIN Production pro
ON pro.produciton_id = t.production_id
JOIN PRICE pr
ON pr.production_id = pro.production_id
AND pr.levelId = t.level_id
JOIN price_level pl
ON   pl.levelid = pr.levelid
LEFT OUTER JOIN booking b
on  b.booking_id = t.booking_id
LEFT OUTER JOIN customer cus
on  cus.customer_id = b.customer_id
LEFT OUTER JOIN customer_concession cons
ON cons.concession_id = cus.concession_id
LEFT OUTER JOIN memebership m
ON M.membership_id = t.membership_id
LEFT OUTER JOIN membership_concession mc
ON mc.mConcession_id = m.mConcession_id
Order by t.ticketid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...