编写查询时遇到一些小困难:
我有以下表格:
ID | FromId | ToId
--------------------------
1 10 15
2 10 15
3 15 10
4 15 10
5 15 20
6 14 15
7 20 15
8 20 10
9 10 20
10 10 1
不,我想从这里获得价值10的独特价值
并且我的意思是,例如,我想要完成的结果,如果变量是10
FromId | ToId
------------------
10 15
20 10
10 1
我当然不确定是否有可能完成那样的事情......
在这种情况下对我来说
10 20 == 20 10
但对于sql而言:/
我认为人们完全不理解我......
我需要与10的组合中的唯一性
答案 0 :(得分:3)
您可以这样做:
select least(fromId, toId) as fromId, greatest(fromId, toId) as toId
from MyTable t
where fromId = 10 or toId = 10
group by least(fromId, toId), greatest(fromId, toId);
编辑:
(回答您关于表现的问题。)
您应该在fromId
和toId
上建立索引。
您的原始数据具有重复值,因此必须删除重复项。在MySQL中,这需要通过显式order by
或使用group by
(以及关联的文件排序)对数据进行排序。上述查询应该与使用distinct
。
如果您有两个索引,在t(fromId, toId)
和t(toId, fromId)
上,则以下可能效果更佳:
select distinct fromId, toId
from MyTable t
where fromId = 10
union all
select distinct fromId, toId
from MyTable t
where toId = 10 and
not exists (select 1 from MyTable t2 where t2.fromId = t.fromId and t2.toId = t.fromId);
MySQL可以通过扫描索引来执行distinct
。我不确定它是否在实践中发挥作用。
答案 1 :(得分:2)
我认为这应该有用,
SELECT * FROM myTable WHERE FromId = 10 OR ToId = 10;
答案 2 :(得分:0)
SELECT DISTINCT FromId,ToId FROM myTable WHERE FromId = 10 OR ToId = 10
答案 3 :(得分:0)
尝试区别于OR。
select distinct FromId,ToId from Test where FromId = 10 OR ToId=10;