左连接出乎意料的结果

时间:2018-04-17 15:30:51

标签: mysql sql

我有一个包含两个表的数据库。一个是coche表,另一个是ruta

coche

pk_coche    modelo      
-------------------
1           Model 1
2           Model 2 
3           Model 3

ruta

pk_ruta     fk_coche    kms_inicio     kms_final
-------------------------------------------------
1           1           200.000        210.000
2           3           100.000        110.000  
3           3           110.000        120.000    
4           1           210.000        0

kms_inicio的列是指汽车以200,000 km为例开始路线的公里数。只要kms_final的列等于0,就意味着汽车在路上。

我有这个问题:

SELECT pk_coche, modelo FROM coche c
LEFT JOIN ruta r ON c.pk_coche=r.fk_coche
WHERE r.pk_ruta is null or r.kms_final > 0

我的问题是查询结果如下:

pk_coche    modelo      
-------------------
1           Model 1
2           Model 2 
3           Model 3
3           Model 3

结果应如下所示:

pk_coche    modelo      
-------------------
2           Model 2 
3           Model 3

因为正如我之前解释的那样kms_final等于0,这意味着该车正在航行中。我的意思是,我应该看到的结果是Modelo 2Modelo 3汽车,因为kms_final大于0已完成路线。

您可以在此链接上看到更好的示例:

http://www.sqlfiddle.com/#!9/e2e7ea/32

2 个答案:

答案 0 :(得分:0)

我认为你已经记录了所有没有记录里程数的汽车。

试试这个(MS SQL):

SELECT pk_coche
, modelo 
FROM coche c
where not exists 
(
  select top 1 1
  from ruta r 
  where r.fk_coche = c.pk_coche
  and r.kms_final = 0
)

SQL Fiddle

更新:MySQL解决方案

根据更新的标签,请在下面找到适用于MySQL的解决方案。

SELECT pk_coche
, modelo 
FROM coche c
where not exists 
(
   select 1
   from ruta r 
   where r.fk_coche = c.pk_coche
   and r.kms_final = 0
   LIMIT 1
 )

SQL Fiddle

答案 1 :(得分:0)

我认为这有效:

select distinct a.pk_coche, modelo  from #coche a  
left join #ruda b on a.pk_coche=b.fk_coche
where b.pk_ruta is null or modelo not in(select modelo from #coche a join #ruda b on a.pk_coche=b.fk_coche where kms_final =0)