sql - 使用 SQL 内连接进行字符串匹配?

标签 sql inner-join

我正在尝试使用内部联接来为我进行字符串匹配。
我有一个组织表,其中包含我想要匹配的 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/

相关文章:

mysql - table 上联赛和直接比赛冠军

mysql - 内连接、嵌套查询和自然连接之间的性能差异?

sql - oracle sql中的join关键字和inner join关键字有什么区别?

mysql - MySQL 中的内连接选择

mysql - MySQL 中的选择案例

java - Postgres 在尝试截断表时提示缺少列

mysql - UPDATE IF EXISTS 错误

sql - 如何将1列数据拆分为3列?

具有 7 个表的 MySql 内部连接查询

php - 内连接可以在单个 mysql 查询中与 RIGHT 或 LEFT Join 一起有效使用吗