用于查找具有特定属性和相关非外键控项的项的SQL查询

时间:2016-02-19 04:26:40

标签: mysql sql postgresql relational-database

我正在尝试编写一个sql查询来返回具有特定属性且也由非外键项引用的项的列表。为了阐述,我们假设表一是汽车,它具有注册状态。表2是停车许可证,其具有非外键字段car_id,其是表示车辆ID的int。我想返回一份注册状态为“有效”的汽车列表,以及至少一个带有其ID的许可证。

我尝试了内部和左部连接的组合与wheres的不同组合,但我无法让它返回我需要的东西。

是否有办法计算每辆车的连接返回的许可数量?还是有一种我想念的简单方法?

2 个答案:

答案 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