簡體   English   中英

SQL 服務器查詢單表中沒有父子的行

[英]SQL Server query to find rows that have no parent and child in a single table

我有這張桌子:

CREATE TABLE dbo.Invoices 
(
    [InvoiceCode] varchar(20), 
    [ParentInvoiceCode] varchar(20),
    [InvoiceDate] date 
)

INSERT INTO dbo.Invoices
VALUES
( 'INV-001', 'INV-001', N'2015-01-01 00:00:00.000' ),
( 'INV-002', 'INV-001', N'2015-01-01 00:00:00.000' ),
( 'INV-003', 'INV-001', N'2015-01-01 00:00:00.000' ),
( 'INV-004', 'INV-004', N'2015-01-01 00:00:00.000' ),
( 'INV-005', 'INV-005', N'2015-01-01 00:00:00.000' ),
( 'INV-006', 'INV-006', N'2015-01-01 00:00:00.000' ),
( 'INV-007', 'INV-007', N'2015-01-01 00:00:00.000' ),
( 'INV-008', 'INV-007', N'2015-01-01 00:00:00.000' ),
( 'INV-009', 'INV-007', N'2015-01-01 00:00:00.000' ),
( 'INV-010', 'INV-007', N'2015-01-01 00:00:00.000' )

如您所見,值 4、5、6 沒有父行或子行。 我可以使用什么查詢來找到這些?

所以這只是一個簡單not-exists查詢:

找到codeparentcode代碼相同但這些行不存在不同parentcode代碼的所有行。

另請注意,您不能擁有超過 999 個發票代碼並且仍然可以訂購它們,代碼和父代碼應該是integer列。 否則,當您要添加INV-1000時,它將被認為小於INV-999 ,因為這些是字符串

select * 
from invoices i
where i.ParentInvoiceCode = i.InvoiceCode
    and not exists (
        select * from invoices i2
        where i2.ParentInvoiceCode = i.InvoiceCode 
            and i2.InvoiceCode != i2.ParentInvoiceCode
    )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM