SQL 查询以查找具有特定属性的项目和相关的非外键项目
SQL query for to find item with a specific attribute and related non-foreign keyed items
我正在尝试编写一个 sql 查询 return 具有特定属性并且还被非外键项目引用的项目列表。解释一下,假设table一个是汽车,它有一个注册状态。 Table 二是停车许可证,它有一个 car_id 的非外键字段,它是一个代表汽车 ID 的整数。我想要 return 一份注册状态为 'active' 且至少有一个带有其 ID 的许可证的汽车列表。
我尝试了内部连接和左连接与 wheres 的不同组合,但我无法达到 return 我需要的效果。
是否有办法计算每辆汽车通过连接 return 获得的许可数量?还是我缺少更简单的方法?
类似于:
SELECT 辆汽车。*
来自汽车
其中 cars.reg_status='active'
并且存在(SELECT *
FROM 许可证
其中 permits.car_id=cars.car_id);
这应该 return 所有状态活跃且至少有 1 个许可证的汽车
顺便说一句:如果 'permits' table 通过 car_id 引用 'cars' table,我强烈建议创建一个外键
您可以进行 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
我正在尝试编写一个 sql 查询 return 具有特定属性并且还被非外键项目引用的项目列表。解释一下,假设table一个是汽车,它有一个注册状态。 Table 二是停车许可证,它有一个 car_id 的非外键字段,它是一个代表汽车 ID 的整数。我想要 return 一份注册状态为 'active' 且至少有一个带有其 ID 的许可证的汽车列表。
我尝试了内部连接和左连接与 wheres 的不同组合,但我无法达到 return 我需要的效果。
是否有办法计算每辆汽车通过连接 return 获得的许可数量?还是我缺少更简单的方法?
类似于:
SELECT 辆汽车。*
来自汽车
其中 cars.reg_status='active'
并且存在(SELECT *
FROM 许可证
其中 permits.car_id=cars.car_id);
这应该 return 所有状态活跃且至少有 1 个许可证的汽车
顺便说一句:如果 'permits' table 通过 car_id 引用 'cars' table,我强烈建议创建一个外键
您可以进行 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