我在SQL Fiddle中准备了这个Demo。问题是第一行在结果中重复。我怎么才能只展示一次。
答案 0 :(得分: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
会将IdUser标记为IsDriver = 1,查看数据时,似乎不正确。
答案 1 :(得分:0)
使用不同的
InputStream stdlib = getClass().getResourceAsStream("/cz/matejcik/openwig/stdlib.lbc");