结果中的重复行

时间:2015-09-04 11:18:07

标签: mysql sql join

我在SQL Fiddle中准备了这个Demo。问题是第一行在结果中重复。我怎么才能只展示一次。

2 个答案:

答案 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,查看数据时,似乎不正确。

Sample SQL Fiddle

答案 1 :(得分:0)

使用不同的

InputStream stdlib = getClass().getResourceAsStream("/cz/matejcik/openwig/stdlib.lbc");