Mysql SQL按相反顺序选择属性元组(而不是按顺序)
我有一个mysql表,其中有我的驱动程序日志条目。表中有两列:开始位置和结束位置。有时可能的是,结束的位置等于开始的位置(我认为这听起来合乎逻辑) 现在,我不想选择表中的条目,这些条目可以是tupel(x,y),但不能是(y,x) 例如:Mysql SQL按相反顺序选择属性元组(而不是按顺序),mysql,sql,select,duplicates,Mysql,Sql,Select,Duplicates,我有一个mysql表,其中有我的驱动程序日志条目。表中有两列:开始位置和结束位置。有时可能的是,结束的位置等于开始的位置(我认为这听起来合乎逻辑) 现在,我不想选择表中的条目,这些条目可以是tupel(x,y),但不能是(y,x) 例如: id | start_place | end_place ----------------------------------- 0 | New York | San Francisco ----------------------------
id | start_place | end_place
-----------------------------------
0 | New York | San Francisco
-----------------------------------
1 | San Francisco | New York
id为1的行与id为0的行顺序相反,不应成为结果的一部分
有人有主意吗?有好几次我尝试使用subselect或where条件,如(x,y)!=(y,x)但这不起作用。这可以通过
最小值
和最大值
函数以及分组方式来实现
select least(start_place,end_place), greatest(start_place,end_place)
from tbl
group by least(start_place,end_place), greatest(start_place,end_place)
having count(*) = 1
要使用其他列检索此类行,请使用
select *
from tbl
where (least(start_place,end_place), greatest(start_place,end_place))
in (select least(start_place,end_place), greatest(start_place,end_place)
from tbl
group by least(start_place,end_place), greatest(start_place,end_place)
having count(*) = 1
)
使用最小值
、最大值
和不同值
获得不同的对:
select distinct
least(start_place, end_place) as place1,
greatest(start_place, end_place) as place2
from mytable;
您应该包括您尝试过的查询。您说您想取消id 1,因为id为0。您是否也准备好因为id 1而取消id 0?还是说,解雇哪一个和保留哪一个有关系?顺序有关系吗?如果您有一行具有x,y
,但没有一行具有y,x
,是否仍然可以显示y,x
,而不是x,y
?空值是否出现在起始位置或结束位置?是否会出现真正的重复,即具有x,y
的两条记录?@ThorstenKettner:结果的一部分是(x,y)还是(y,x)并不重要。顺序不重要,是的,(x,y)仍然可以;)这就是我一直在寻找的!谢谢!