只选择具有唯一字段的行
什么是SQL命令,用于检查行中没有重复字段的行。只选择具有唯一字段的行
例如:
A A A B B B
不应该在结果表。
如A B C D E F
只有行即等给出的数据:
A A A B B B
A B C D E F
A A B G H Q
应该返回A B C D E F
Select distinc *
返回唯一行的字段不是唯一的值。 您应该将每列的值与其他值进行比较。 (假设列类型相同)。例如,对于一个4列的表格,你应该做的smoething像:
SELECT Col1, Col2, Col3, Col4 FROM MyTable WHERE
Col1 NOT IN (Col2,Col3,Col4) AND
Col2 NOT IN (Col3,Col4) AND
Col3 <> Col4
可能更容易使用SELECT Col1,Col2,Col3,Col4 FROM MyTable WHERE Col1 IN(Col2,Col3,...)和Col2 IN(Col1,Col3,...)... – 2010-10-02 20:33:33
是的,这是正确的。但我不想要这个,因为它有很多代码麻烦。我在问是否有一个SQL命令检查你的表在行中的唯一性并返回它。 – AnEventHorizon 2010-10-02 20:34:00
同意。只需将其更改为:WHERE Col1 ** NOT ** IN(Col2,Col3,...) – Kamyar 2010-10-02 20:34:36
SELECT DISTINCT * FROM tablename
SELECT DISTINCT col FROM tabl
不,这将仍然返回具有重复值IN THEM的行。我希望DISTINCT值在行中,而不是表中。 – AnEventHorizon 2010-10-02 20:27:59
保持使用封盖使文本更易读。哦,等一下,没有。 – 2010-10-02 20:29:29
这就是所谓的强调。 – AnEventHorizon 2010-10-02 20:30:39
有没有简单的命令来做到这一点。
似乎是一个不寻常的要求,并可能表明,如果所有列都可以互换,表格不是第一范式。
在Microsoft SQL Server
;With YourData AS
(
select 'A' as C1, 'A' as C2, 'A' as C3, 'B' as C4, 'B' as C5, 'B' as C6 UNION ALL
select 'A' as C1, 'B' as C2, 'C' as C3, 'D' as C4, 'E' as C5, 'F' as C6
)
SELECT *
FROM YourData
WHERE 1 =
(SELECT TOP 1 COUNT(*) AS Cnt
FROM (
SELECT C1 AS C
UNION ALL
SELECT C2
UNION ALL
SELECT C3
UNION ALL
SELECT C4
UNION ALL
SELECT C5
UNION ALL
SELECT C6
) D
GROUP BY C
ORDER BY Cnt DESC
)
+1表格必须标准化。用这种方式查询的好工作;) – MartinodF 2010-10-02 21:32:42
编辑以下工作。我只是在寻找一个单行命令,如果存在的话。 – AnEventHorizon 2010-10-02 20:43:23
谢谢,但它们是单列中的值还是分布在多列中? – 2010-10-02 20:56:02
每个字母都属于一列。 – AnEventHorizon 2010-10-02 21:06:02