我有一个场景,我有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行只是一百万行中的样本数据。我需要查询这种情况
答案 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子句中包含距离来修复。