У меня есть две таблицы SQL Server
:
- Счет (
invoice
) - Счета-фактуры (
invoice_relation
)
invoice
хранит все записи счетов-фактур с помощью фолио транзакций.
invoice_relation
таблица хранит любое отношение между счетами.
Это пример того, как счета-фактуры могут быть связаны между собой:
Итак, цель состоит в том, чтобы найти "folio
" в таблице invoice
с учетом invoicenumber
и a folio
, но folio
иногда не будет folio
, что invoice
имеет, поэтому мне нужно выполнить поиск по всем отношениям дерева, чтобы узнать, соответствует ли какой-либо счет-фактура номерм счета-фактуры, а также folio
является частью отношения.
Например, мне нужно найти номер фокуса и номер счета-фактуры:
- Folio: 1003
- Номер счета: A1122
В моем запросе мне нужно сначала найти фолио, потому что это мой первичный ключ таблицы invoice
. Затем попытайтесь сопоставить A1122
с D1122
, который не будет соответствовать, поэтому я должен искать всю древовидную структуру, чтобы найти, есть ли A1122
. Результатом будет то, что счет-фактура A1122
был найден в фолио 1000
.
Есть ли подсказка о том, как это сделать?
Вот script того, как создавать приведенные выше примеры таблиц с данными:
CREATE TABLE [dbo].[invoice](
[folio] [int] NOT NULL,
[invoicenumber] [nvarchar](20) NOT NULL,
[isactive] [bit] NOT NULL,
CONSTRAINT [PK_invoice] PRIMARY KEY CLUSTERED
(
[folio] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[invoice_relation](
[relationid] [int] NOT NULL,
[invoice] [nvarchar](20) NOT NULL,
[parentinvoice] [nvarchar](20) NOT NULL,
CONSTRAINT [PK_invoice_relation_1] PRIMARY KEY CLUSTERED
(
[relationid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
INSERT [dbo].[invoice] ([folio], [invoicenumber], [isactive]) VALUES (1000, N'A1122', 1)
GO
INSERT [dbo].[invoice] ([folio], [invoicenumber], [isactive]) VALUES (1001, N'B1122', 1)
GO
INSERT [dbo].[invoice] ([folio], [invoicenumber], [isactive]) VALUES (1002, N'C1122', 1)
GO
INSERT [dbo].[invoice] ([folio], [invoicenumber], [isactive]) VALUES (1003, N'D1122', 1)
GO
INSERT [dbo].[invoice] ([folio], [invoicenumber], [isactive]) VALUES (1004, N'F1122', 1)
GO
INSERT [dbo].[invoice] ([folio], [invoicenumber], [isactive]) VALUES (1005, N'G1122', 1)
GO
INSERT [dbo].[invoice_relation] ([relationid], [invoice], [parentinvoice]) VALUES (1, N'A1122', N'B1122')
GO
INSERT [dbo].[invoice_relation] ([relationid], [invoice], [parentinvoice]) VALUES (2, N'C1122', N'A1122')
GO
INSERT [dbo].[invoice_relation] ([relationid], [invoice], [parentinvoice]) VALUES (3, N'D1122', N'A1122')
GO
INSERT [dbo].[invoice_relation] ([relationid], [invoice], [parentinvoice]) VALUES (4, N'F1122', N'B1122')
GO
INSERT [dbo].[invoice_relation] ([relationid], [invoice], [parentinvoice]) VALUES (5, N'G1122', N'F1122')
GO