У меня есть две таблицы 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






