选择 SQL 查询时出现双倍结果 [重复]
Posted
技术标签:
【中文标题】选择 SQL 查询时出现双倍结果 [重复]【英文标题】:Double results when select SQL query [duplicate] 【发布时间】:2017-02-22 09:04:42 【问题描述】:我已尝试自行解决此问题,但找不到任何解决方案,因此也许您可以提供帮助。我有以下查询:
select users.name,users.userid,position,department.name,num,phone.pname,objpict.fname
from users
inner join opict on opict.ownerid=users.id
inner join department on department.id=users.deptid
inner join phone on phone.ownerid=users.id
where quitted=0 and tag='web' and opict.del=0 and phone.del=0 and phone.ownertype=5
效果很好,但问题是某些用户有 2 或 3 个不同的数字,因此选择结果将是:
Name UserID Number
------ ------ --------
David Test 12345678
David Test 11111111
所以问题是输出会加倍。我该如何解决它的格式如下:
Name UserID Number
------ ------ --------
David Test 12345678
Test 11111111
【问题讨论】:
在您的应用程序代码中执行此操作。 SQL 不适合做这样的操作。 您最好采用另一种方法,以便每个用户有 1 行,每个电话号码有 1 列,而不是每个用户有几行。仅当您拥有最大和有限数量的电话号码(2-3 听起来不错)时,这才有效。 Example here 【参考方案1】:如果您不想显示重复值,可以使用 ROW_NUMBER()
和 CASE
语句:
select case
when row_number() over (partition by users.userId order by users.userId) = 1
then users.name
else NULL
end as userName
, users.userid
, position
, department.name
, num
, phone.pname
, objpict.fname
from users
inner join opict
on opict.ownerid = users.id
inner join department
on department.id = users.deptid
inner join phone
on phone.ownerid = users.id
where quitted = 0
and tag = 'web'
and opict.del = 0
and phone.del = 0
and phone.ownertype = 5
如果您不想显示 NULL
并想要一个“空白”,您可以将 CASE
语句的第二个分支更改为 else ''
。
【讨论】:
谢谢:) 我不得不添加更多“案例”,但它正在工作:) 谢谢大家的帮助。以上是关于选择 SQL 查询时出现双倍结果 [重复]的主要内容,如果未能解决你的问题,请参考以下文章