sql - 左连接位于左连接之上

标签 sql sql-server sql-server-2005 tsql

我不太确定如何完成我想做的事情。这是一个简化版本:

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 都链接到每张发票。帮忙?

最佳答案

试试这个:

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'

关于sql - 左连接位于左连接之上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4822100/

相关文章:

c# - 备份和恢复 MS SQL 数据库

SQL Server 2005 表假脱机(Lazy spool)——性能

mysql - 如何选择高度体重增长的人?

mysql - 按查询顺序发出

sql-server - PostgreSQL 和 SQL Server 中 "length/values"数据类型的默认 "bit"是什么

SQL Server,将两条记录合并到一条记录中

sql - 如何将值插入到 sql server 2000、2005、2008 中的表中?

python - 是否可以使用已删除的架构运行 makemigrations ?

sql - 添加了 TSQL Cursor 新记录

sql - 如何在同一个表中复制关系记录?