sql - 如何在查询中不使用不同的情况下获得相同的结果

标签 sql distinct

我有一个包含如下数据的表格:

[ID, Name]
1, Bob
1, Joe
1, Joe
1, Bob

我想检索一个记录列表,显示具有相同 ID 的记录之间的关系。 例如,我希望查询得到以下结果集:

Bob, Joe
Joe, Bob
Bob, Bob
Joe, Joe

这显示了表中每个项目的“从”和“到”。

我可以通过使用以下查询获得此结果:

SELECT DISTINCT [NAME] 
FROM TABLE A
INNER JOIN TABLE B ON A.ID = B.ID

我是否可以在不使用 select 语句中的“distinct”的情况下获得相同的结果集?如果我不包含重复值,我会返回 16 条记录,而不是 4 条。

最佳答案

在没有 DISTINCT 的情况下获得重复行的原因是,ID = x 的每一行都将与 ID = x 的其他所有行连接起来。由于原始表有 (1, "Bob") 两次,因此这两个表都将连接到 ID = 1 的另一个表中的每一行。

在执行联接之前删除重复项将有两个作用:减少运行查询的时间,并防止重复行出现在结果中。

类似于(使用 MySQL 版本的 SQL):

SELECT L.NAME, R.NAME
FROM (SELECT DISTINCT ID, NAME FROM A) AS L
INNER JOIN (SELECT DISTINCT ID, NAME FROM B) AS R
ON L.ID = R.ID

编辑:B 是表 A 的别名吗?

关于sql - 如何在查询中不使用不同的情况下获得相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7084511/

相关文章:

postgresql - 如何在VIEWS中正确使用DISTINCT

php - PHP 中嵌套 do while 循环

linq-to-objects - 使用 LINQ to objects 在所有嵌套集合中选择不同的值?

mysql - 根据第二列中具有最大日期值的列选择不同的值

SQL更新查询结果

php - 如何使用 INNER JOIN 为每个用户获取 1 行

c# - 从 List<List<int>> 中删除重复的 List

mongodb - 如何在mongodb中更快地进行不同的操作

java - android studio sqlite方法错误

c# - 当我什么都得不到时却得到空洞的答案