【发布时间】:2015-05-28 17:46:09
【问题描述】:
我在 SQL Server 2008 中工作。我有以下情况。我有一个表,它有 2 列组成主键。 (不过,没有在键上定义唯一性约束。)我知道我有主键重复项。每个主键,我想识别另一列中的不同值。所以,假设我有下表:
INSERT INTO some_table (Col1, Col2, COl3) VALUES
('A', '1', 'a'),
('A', '1', 'b'),
('B', '1', 'a'),
('B', '2', 'b'),
('C', '1', 'a'),
('C', '1', 'a'),
('C', '2', 'b')
我想按 Col1 和 Col2 进行分组,并且我想找到所有有超过 1 个不同 Col3 值的行。例如,使用上表,我希望看到: (A, 1, a), (A, 1, b)。
如何编写这个 SQL 查询?我的 SELECT 语句需要包含 Col1、Col2 和 Col3。但是,如果我执行 GROUP BY Col1、Col2,那么我不能在 SELECT 语句中包含 Col3。
【问题讨论】:
-
你不能有重复的主键,除非你的主键是合乎逻辑的。对主键强制执行唯一约束 100%,没有办法解决这个问题。我的猜测是您实际上没有在表中定义主键。
-
你是对的。在我们的正式表中,它是主键。但是,在我们的数据验证表中,这只是合乎逻辑的。我的目标是对我们的数据验证表进行调查。
标签: sql-server