mysql - 使用 MySql 左连接选择查询
问题描述
我有 3 个表(属性,设施,property_facility)
现在我想从facility
带有属性数据的表中获取所有设施到给定的属性 ID。
我尝试LEFT JOIN
如下。但我无法从设施表中获得所有设施。
SELECT property_id
, contract_id
, type_id
, location_id
, beds
, ROUND(price,3) as price
, f.facility_id
, f.name
, pf.facility_id
FROM facility f
LEFT JOIN property_facility pf ON pf.facility_id = f.facility_id AND pf.property_id = 6
LEFT JOIN property p USING(property_id)
WHERE p.property_id = 6
谁能告诉我如何正确进行此查询?
解决方案
您的WHERE
子句正在过滤掉不匹配的设施。您将需要切换USING
到ON
并执行以下操作:
FROM facility f LEFT JOIN
property_facility pf
ON pf.facility_id = f.facility_id AND
pf.property_id = 6 LEFT JOIN
property p
ON p.property_id = pf.property_id AND p.property_id = 6
您似乎理解了这个概念,因为您对第一个使用相同的条件JOIN
。
嗯,实际上,property_id
并没有改变。因此,如果您愿意,您可以删除该WHERE
子句并继续。USING
推荐阅读
- mysql - 如何按范围类别排序?
- flyte - 防止一个失败的子任务使 Flyte 中的所有任务失败
- python - Word2Vec 比较来自不同模型的不同大小的向量
- rust - 从 Vec 序列化和反序列化
- typescript - 我可以否定 NestJS 的 Guard 吗?
- python - 重现用于回归的 LightGBM 自定义损失函数
- functional-programming - Nix 将可变参数添加到函数的集合中
- angular - 错误 NG6002:出现在 AppModule 的 NgModule.imports 中,但无法解析为 NgModule 类
- asp.net - EntityException:基础提供程序在打开时失败。一台服务器可以关闭数据库连接,使另一台服务器无法打开吗?
- f# - 调用采用 Action或 Action的重载 C# 方法来自 F#