具有多个重复列的方案的SQL查询

时间:2014-09-28 19:50:11

标签: sql

我有一个场景,我有3列state1 state2和距离5行,如

state1 state2 distance
TX      CA     100
CA      TX     100
OH      MI     400
MI      OH     400

由于从Tx到CA和CA到TX的距离相同,我只需要前两行中的一行 即TX,CA,100或CA,TX,100以及5行只是一百万行中的样本数据。我需要查询这种情况

2 个答案:

答案 0 :(得分:0)

试试这个:

Select distinct
    case when state1 < state2 then state1 else state2 end as state1,
    case when state1 > state2 then state1 else state2 end as state1,
    distance
from table

甚至是这样:

select state1,state2,distance
from table
where state1 <= state2

答案 1 :(得分:0)

如果您的表可以包含单向行,那么您需要检查一行没有可被state1 < state2条件排除的对应行。

SELECT state1, state2, distance
FROM routes r1 
WHERE state1 < state2
    -- include rows that have no duplicate
    OR NOT EXISTS (
        SELECT 1 FROM routes r2 
        WHERE r2.state1 = r1.state2 
       AND r2.state2 = r1.state1
       )

Sample SQL Fiddle,其中包含MI-&gt; CA的新行,如果没有OR NOT EXIST谓词,则会被删除。

此查询不关心距离是否不同,因此如果可能存在具有相同状态但距离不同的行,则会返回不正确的结果。这可以通过在where子句中包含距离来修复。