我正在尝试使用内部联接来为我进行字符串匹配。
我有一个组织表,其中包含我想要匹配的 RegNo 列
有 3 个组织具有相同的 RegNo (8888)
使用下面的脚本我得到以下结果
Row# KeyA KeyB ---- ---- ---- 1 5 1 2 7 1 3 1 5 4 7 5 5 1 7 6 5 7
In my scenario Row #1 (KeyA=5, KeyB=1) and Row #3 (KeyA=1, KeyB=5) are the "same"
And #2 and #5 are the same
As well as #4 and #6
Is there as way to remove these "duplicates" from the result?
Here's the script to create table and data
USE YourTempDB
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Organisation]') AND type in (N'U'))
DROP TABLE [dbo].[Organisation]
GO
CREATE TABLE [dbo].[Organisation](
[ENT_Key] [bigint] NOT NULL,
[Name] [varchar](128) NOT NULL,
[RegNo] [varchar](32) NOT NULL,
[TaxNo] [varchar](32) NOT NULL,
[TradeAs] [varchar](128) NOT NULL,
CONSTRAINT [PK_Organisation] PRIMARY KEY CLUSTERED
(
[ENT_Key] 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
SET ANSI_PADDING OFF
GO
INSERT [dbo].[Organisation] ([ENT_Key], [Name], [RegNo], [TaxNo], [TradeAs]) VALUES (1, N'ASD', N'8888', N'ASD', N'ASD')
INSERT [dbo].[Organisation] ([ENT_Key], [Name], [RegNo], [TaxNo], [TradeAs]) VALUES (2, N'ZAQ', N'ZAQ', N'ZAQ', N'ZAQ')
INSERT [dbo].[Organisation] ([ENT_Key], [Name], [RegNo], [TaxNo], [TradeAs]) VALUES (3, N'QWE', N'4321', N'4321', N'QWE')
INSERT [dbo].[Organisation] ([ENT_Key], [Name], [RegNo], [TaxNo], [TradeAs]) VALUES (4, N'SDF', N'1234', N'1234', N'SDF')
INSERT [dbo].[Organisation] ([ENT_Key], [Name], [RegNo], [TaxNo], [TradeAs]) VALUES (5, N'ZXC', N'8888', N'ZXC', N'ZXC')
INSERT [dbo].[Organisation] ([ENT_Key], [Name], [RegNo], [TaxNo], [TradeAs]) VALUES (6, N'WSX', N'9999', N'9999', N'WSX')
INSERT [dbo].[Organisation] ([ENT_Key], [Name], [RegNo], [TaxNo], [TradeAs]) VALUES (7, N'POI', N'8888', N'8888', N'POI')
INSERT [dbo].[Organisation] ([ENT_Key], [Name], [RegNo], [TaxNo], [TradeAs]) VALUES (8, N'ASD', N'Monquestilin Holdings ', N'Monquestilin Holdings ', N'ASD')
INSERT [dbo].[Organisation] ([ENT_Key], [Name], [RegNo], [TaxNo], [TradeAs]) VALUES (9, N'Trupickefazz Direct ', N'Trupickefazz Direct ', N'Trupickefazz Direct ', N'Trupickefazz Direct ')
INSERT [dbo].[Organisation] ([ENT_Key], [Name], [RegNo], [TaxNo], [TradeAs]) VALUES (10, N'Rapnipedower ', N'Rapnipedower ', N'Rapnipedower ', N'Rapnipedower ')
/****** Object: Default [DF_Organisation_VendorRegDate] Script Date: 07/01/2014 09:24:13 ******/
SELECT [t0].[ENT_Key] AS [KeyA], [t1].[ENT_Key] AS [KeyB]
FROM [Organisation] AS [t0]
INNER JOIN [Organisation] AS [t1] ON [t0].[RegNo] = [t1].[RegNo]
WHERE [t0].[ENT_Key] != [t1].[ENT_Key]
最佳答案
只需将 where
条件更改为:
WHERE [t0].[ENT_Key] < [t1].[ENT_Key]
发送!=
关于sql - 使用 SQL 内连接进行字符串匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24506864/