我正在尝试编写一个sql查询来返回具有特定属性且也由非外键项引用的项的列表。为了阐述,我们假设表一是汽车,它具有注册状态。表2是停车许可证,其具有非外键字段car_id,其是表示车辆ID的int。我想返回一份注册状态为“有效”的汽车列表,以及至少一个带有其ID的许可证。
我尝试了内部和左部连接的组合与wheres的不同组合,但我无法让它返回我需要的东西。
是否有办法计算每辆车的连接返回的许可数量?还是有一种我想念的简单方法?
答案 0 :(得分:2)
类似的东西:
选择汽车。*
从汽车
在哪里cars.reg_status ='活跃'
和EXISTS(选择*
从许可证
WHERE permit.car_id = cars.car_id);
这应该返回所有状态有效且至少有1个许可证的车辆
顺便说一句:如果'permit'表通过car_id引用'cars'表,我强烈建议创建一个外键
答案 1 :(得分:0)
您可以进行JOIN并计算匹配的ID: -
SELECT a.car_id
COUNT(b.permit_id)
FROM cars a
INNER JOIN parking_permits b
ON a.car_id = b.car_id
WHERE a.registration_status = 'active'
GROUP BY a.car_id
如果您想在列表中包含没有任何停车许可证的人: -
SELECT a.car_id
COUNT(b.permit_id)
FROM cars a
LEFT OUTER JOIN parking_permits b
ON a.car_id = b.car_id
WHERE a.registration_status = 'active'
GROUP BY a.car_id