Левые соединения сверху левых соединений - PullRequest
3 голосов
/ 28 января 2011

Я не совсем уверен, как добиться того, что я пытаюсь сделать.Вот упрощенная версия:

CREATE TABLE PO (
POID int,
PONumber varchar(20)
)

INSERT INTO PO
(POID, PONumber)
VALUES (1, '2520001')

CREATE TABLE WSR (
WSRID int,
POID int,
WSRNumber varchar(1)
)

INSERT INTO WSR
(WSRID, POID, WSRNumber)
VALUES (1, 1, '1')

INSERT INTO WSR
(WSRID, POID, WSRNumber)
VALUES (2, 1, '2')

CREATE TABLE Invoice(
InvoiceID int,
POID int,
InvoiceNumber varchar(20)
)

INSERT INTO Invoice
(InvoiceID, POID, InvoiceNumber)
VALUES (1, 1, '11111111')

INSERT INTO Invoice
(InvoiceID, POID, InvoiceNumber)
VALUES (2, 1, '11111111 C010001')

INSERT INTO Invoice
(InvoiceID, POID, InvoiceNumber)
VALUES (3, 1, '11111111 H010001')

INSERT INTO Invoice
(InvoiceID, POID, InvoiceNumber)
VALUES (4, 1, '11111111 Q010001')

INSERT INTO Invoice
(InvoiceID, POID, InvoiceNumber)
VALUES (5, 1, '22222222')

CREATE TABLE InvoiceMatch(
POID int,
InvoiceID int,
WSRID int)

INSERT INTO InvoiceMatch
(POID, InvoiceID, WSRID)
VALUES (1, 1, 1)

INSERT INTO InvoiceMatch
(POID, InvoiceID, WSRID)
VALUES (1, 5, 2)

Исходя из этих данных, я хочу получить этот результат:

PONumber, WSRNumber, InvoiceNumber
2520001   1          11111111
2520001   NULL       11111111 C010001
2520001   NULL       11111111 H010001
2520001   NULL       11111111 Q010001
2520001   2          22222222

Запрос, который я сейчас использую, таков:

SELECT DISTINCT p.POID, p.PONumber, w.WSRNumber, i.InvoiceNumber
FROM PO p
LEFT OUTER JOIN InvoiceMatch im ON im.POID = p.POID
LEFT OUTER JOIN WSR w ON w.POID = im.POID
LEFT OUTER JOIN Invoice i ON i.POID = im.POID
WHERE p.PONumber = '2520001'

но это не правильно.Все WSR связаны с каждым счетом.Помощь

Ответы [ 2 ]

2 голосов
/ 28 января 2011

Попробуйте это:

SELECT  DISTINCT p.POID
    ,p.PONumber
    ,w.WSRNumber
    ,i.InvoiceNumber
FROM PO p INNER JOIN Invoice i 
  ON i.POID = p.POID LEFT JOIN InvoiceMatch im 
  ON i.InvoiceID = im.InvoiceID LEFT OUTER JOIN WSR w 
  ON im.WSRID = w.WSRID
WHERE p.PONumber = '2520001'
1 голос
/ 28 января 2011

Я думаю, что порядок ваших таблиц в некоторых ваших Left Outer Joins может быть выключен:

SELECT DISTINCT p.POID, p.PONumber, w.WSRNumber, i.InvoiceNumber
FROM PO p
LEFT OUTER JOIN InvoiceMatch im ON p.POID = im.POID
LEFT OUTER JOIN WSR w ON im.POID = w.POID
LEFT OUTER JOIN Invoice i ON m.POID = i.POID
WHERE p.PONumber = '2520001'

Или переключите объединения в предыдущем запросе на Right Outer Joins вместо Left.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...