SQL 忽略重复的主键
SQL Ignore duplicate primary keys
假设您有来自 SELECT
语句的一串结果:
ID (pk) Name Address
1 a b
1 c d
1 e f
2 a b
3 a d
2 a d
是否可以更改 SQL 语句以仅获取 ID 为 1 的记录的一条记录?
我有一个 SELECT
语句显示可以具有相同主键的多个值。我只想获取其中一条记录,如果说,我有 5 条记录具有相同的主键。
SQL: http://pastebin.com/cFCBA2Uy
截图:http://i.imgur.com/UlMBZhC.png
我想要的是只显示一个文件,例如档案编号:925、890
你说当同一ID有多行时,无论选择哪一行,你只需要每个ID一行。
以下查询执行您的要求:
DECLARE @T table
(
id int,
name varchar(50),
address varchar(50)
)
INSERT INTO @T VALUES
(1, 'a', 'b'),
(1, 'c', 'd'),
(1, 'e', 'f'),
(2, 'a', 'b'),
(3, 'a', 'd'),
(2, 'a', 'd');
WITH A AS
(
SELECT
t.id, t.name, t.address,
ROW_NUMBER() OVER (PARTITION BY id ORDER BY (SELECT NULL)) AS RowNumber
FROM
@T t
)
SELECT
A.id, A.name, A.address
FROM
A
WHERE
A.RowNumber = 1
但我认为应该有一个标准。如果您找到了,请将您的标准表达为 OVER 子句中的 ORDER BY。
编辑:
结果如下:
+----+------+---------+
| id | name | address |
+----+------+---------+
| 1 | a | b |
| 2 | a | b |
| 3 | a | d |
+----+------+---------+
免责声明:我写的查询是不确定的,不同的条件(索引、统计等)可能会导致不同的结果。
假设您有来自 SELECT
语句的一串结果:
ID (pk) Name Address
1 a b
1 c d
1 e f
2 a b
3 a d
2 a d
是否可以更改 SQL 语句以仅获取 ID 为 1 的记录的一条记录?
我有一个 SELECT
语句显示可以具有相同主键的多个值。我只想获取其中一条记录,如果说,我有 5 条记录具有相同的主键。
SQL: http://pastebin.com/cFCBA2Uy
截图:http://i.imgur.com/UlMBZhC.png
我想要的是只显示一个文件,例如档案编号:925、890
你说当同一ID有多行时,无论选择哪一行,你只需要每个ID一行。
以下查询执行您的要求:
DECLARE @T table
(
id int,
name varchar(50),
address varchar(50)
)
INSERT INTO @T VALUES
(1, 'a', 'b'),
(1, 'c', 'd'),
(1, 'e', 'f'),
(2, 'a', 'b'),
(3, 'a', 'd'),
(2, 'a', 'd');
WITH A AS
(
SELECT
t.id, t.name, t.address,
ROW_NUMBER() OVER (PARTITION BY id ORDER BY (SELECT NULL)) AS RowNumber
FROM
@T t
)
SELECT
A.id, A.name, A.address
FROM
A
WHERE
A.RowNumber = 1
但我认为应该有一个标准。如果您找到了,请将您的标准表达为 OVER 子句中的 ORDER BY。
编辑:
结果如下:
+----+------+---------+
| id | name | address |
+----+------+---------+
| 1 | a | b |
| 2 | a | b |
| 3 | a | d |
+----+------+---------+
免责声明:我写的查询是不确定的,不同的条件(索引、统计等)可能会导致不同的结果。