Q
结果中的重复行
0
A
回答
2
我不认为加入distinct
会给你正确的结果,我认为真正的问题是,你只参加rides
表上的一个外键(idRide)和而不是其他(idUser)。
此外,混合隐式连接(在from子句中)与显式连接(使用join关键字)不是一个好主意 - 最好是一致地使用显式连接。
我相信正确的查询应该是:
SELECT
register.IdRide,
users.IdUser,
users.Name,
(CASE WHEN rides.IdRide IS NOT NULL THEN 1 ELSE 0 END) As IsDriver
FROM
register
JOIN
users ON register.IdUser = users.IdUser
LEFT JOIN
rides ON rides.IdUser = users.IdUser
AND rides.IdRide = register.IdRide
WHERE
register.IdRide IN (1) ;
与样品的数据,这将返回:
| IdRide | IdUser | Name | IsDriver |
|--------|--------|------|----------|
| 1 | 1 | | 1 |
| 1 | 2 | | 0 |
| 1 | 3 | | 0 |
简单地增加distinct
将标志着ID用户为IsDriver = 1,这,看着数据,似乎不正确。
0
使用不同
SELECT distinct register.IdRide, users.IdUser, users.Name,
(CASE WHEN rides.IdRide IS NOT NULL THEN 1
ELSE 0
END
)As IsDriver
FROM
register,
users
LEFT JOIN rides ON
users.IdUser =rides.IdUser
WHERE
register.IdRide IN (1)
AND register.IdUser = users.IdUser
+0
这很可能不会返回正确的结果,因为缺失的连接条件会导致将IdUser 2标记为驱动程序,因为它只应该是IdUser 1。 – jpw
相关问题
- 1. 重复结果
- 2. JTable重复结果
- 3. Scrapy结果重复
- 4. 重复结果的[CLIPS]
- 5. 避免重复的结果?
- 6. 发送结果res.render显示重复行
- 7. 序言中的重复结果
- 8. WCF中的LINQ返回重复结果
- 9. 重复扫描wifi结果中的SSID
- 10. 联盟相结合的结果与重复的行
- 11. 重复运行旁边的MySQL结果中的数字
- 12. 重复查询结果
- 13. PHP重复查询结果?
- 14. Mysql联盟重复结果
- 15. Django Tables2重复结果
- 16. sql加入重复结果
- 17. SQL隐藏重复结果
- 18. SQL加入重复结果
- 19. MySQL LEFT JOIN重复结果
- 20. 排除查询结果中的重复行
- 21. SQL Query其中结果有重复行的地方
- 22. 从MySQL结果中筛选等效但不重复的行
- 23. SQL结果中有重复名称
- 24. 在Doctrine结果中重复数组键
- 25. while循环没有重置结果,并重复结果
- 26. Akka流重试重复结果
- 27. Python重复结果总是双重
- 28. 的TableView重复的YouTube-API结果
- 29. 在MySQL中智能组合重复行选择结果
- 30. FetchRequest在后续执行中返回重复结果
只需添加'distinct' [DEMO小提琴(http://sqlfiddle.com/#!9/eaa3bb/3) – Crazy2crack
虽然有准备的小提琴是伟大的,它是很好,如果查询实际上是在问题中(连同最小的表格定义和重现问题所需的数据),因为外部链接可能不可靠,并且可能在未来消失。 – jpw
@jpw:好的,谢谢你的建议。 –