我在 table 上叫距离。它有4列。 id,start_from,end_to 距离

我有一些重复的记录。从某种意义上说,记录是重复的,

start_from   |   end_to    | distance
Chennai        Bangalore     350
Bangalore      Chennai       350
Chennai        Hyderabad     500
Hyderabad      Chennai       510

在上表中, chennai到bangalore bangalore到chennai 都具有相同距离。因此,我需要查询以删除上的该记录,选择

我想要一个像
start_from   |   end_to    | distance
Chennai        Bangalore     350
Chennai        Hyderabad     500
Hyderabad      Chennai       510

最佳答案

如果Chennai to BangaloreBangalore to Chennai之间没有区别,则可以尝试以下操作:

select
    max(`start_from`) as `start_from`,
    min(`end_to`) as `end_to`,
    `distance`
from yourtable
group by
    case when `start_from` > `end_to` then `end_to` else `start_from` end,
    case when `start_from` > `end_to` then `start_from` else `end_to` end,
    `distance`

这是上个月的demo

即使Chennai to Hyderabad是350,也可以使用demo

如果您希望保留Bangalore to Chennai,则只需更改maxmin的位置即可:
select
    min(`start_from`) as `start_from`,
    max(`end_to`) as `end_to`,
    `distance`
from yourtable
group by
    case when `start_from` > `end_to` then `end_to` else `start_from` end,
    case when `start_from` > `end_to` then `start_from` else `end_to` end,
    `distance`

也是demo
case when将与大多数数据库兼容。

关于mysql - 查询以从SQL中删除重复项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43650296/

10-11 03:22