我有一个包含数据的表:
[ID, Name]
1, Bob
1, Joe
1, Joe
1, Bob
我想检索一个记录列表,显示具有相同ID的记录之间的关系。 例如,我想从我的查询中得到以下结果集:
Bob, Joe
Joe, Bob
Bob, Bob
Joe, Joe
这显示了表中每个项目的“from”和“to”。
我可以使用以下查询获得此结果:
SELECT DISTINCT [NAME]
FROM TABLE A
INNER JOIN TABLE B ON A.ID = B.ID
对我来说,如果没有在select语句中使用“distinct”来实现相同的结果集吗?如果我不包括distinct,我会得到16条记录,而不是4条记录。
答案 0 :(得分:5)
在没有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的别名吗?
答案 1 :(得分:4)
在SQL和MY SQL中
SELECT COLUMN_NAME FROM TABLE_NAME group by COLUMN_NAME
答案 2 :(得分:0)
您是否尝试过使用group by
条款?
select name
from table a
inner join table b
on a.id=b.id
group by name
这应该与上面的distinct
查询相同。至于你想要的结果集,一个简单的自连接应该这样做:
select name1,name2
from(
select id,name as name1
from table
group by 1,2
)a
join(
select id,name as name2
from table
group by 1,2
)b
using(id)
答案 3 :(得分:-1)
使用union消除重复值而不使用不同的
Declare @TableWithDuplicateValue Table(Name Varchar(255))
Insert Into @TableWithDuplicateValue Values('Cat'),('Dog'),('Cat'),('Dog'),('Lion')
Select Name From @TableWithDuplicateValue
union
select null where 1=0
Go
Output
---------
Cat
Dog
Lion
如需更多替代方式,请访问我的博客
http://www.w3hattrick.com/2016/05/getting-distinct-rows-or-value-using.html