我有一个表格,如下所示:
[ID, Name]
1, Bob
1, Joe
1, Joe
1, Bob
Run Code Online (Sandbox Code Playgroud)
我想检索一个记录列表,显示具有相同ID的记录之间的关系.例如,我想从我的查询中得到以下结果集:
Bob, Joe
Joe, Bob
Bob, Bob
Joe, Joe
Run Code Online (Sandbox Code Playgroud)
这向我展示了表中每个项目的"from"和"to".
我可以使用以下查询获得此结果:
SELECT DISTINCT [NAME]
FROM TABLE A
INNER JOIN TABLE B ON A.ID = B.ID
Run Code Online (Sandbox Code Playgroud)
反正我有没有在select语句中使用"distinct"来实现相同的结果集?如果我不包括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
Run Code Online (Sandbox Code Playgroud)
编辑:B是表A的别名吗?