我有一个包含两个表的数据库。一个是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 2
和Modelo 3
汽车,因为kms_final
大于0
已完成路线。
您可以在此链接上看到更好的示例:
答案 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
)
根据更新的标签,请在下面找到适用于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
)
答案 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)