我有两个表,College_Infra_items
和College_infrastructure
。
College_Infra_items
表具有以下结构和示例数据:
col_infraId requiredSeat available collegeInfrastructureId collegeId
-----------------------------------------------------------------------
1 100 150 1 2
2 200 180 2 2
3 200 160 3 3
4 300 190 4 3
College_infrastructure
具有以下结构和示例数据:
collegeInfrastructureId type name
--------------------------------------------------------------
1 UGC Land Requirement(In acres)
2 UGC Class rooms
3 UGC Total Area
4 UGC Loans
现在我正在写这样的查询
SELECT
ci.collegeInfrastructureId as collegeInfrastructureId,
ci.type as type, ci.name as name,
cli.requiredSeat as requiredSeat,
cli.available as available
FROM
college_infrastructure ci
LEFT JOIN
College_Infra_items cli ON cli.collegeInfrastructureId = ci.collegeInfrastructureId
WHERE
ci.type=:type AND cli.collegeId=:collegeId
ORDER BY
ci.collegeInfrastructureId ASC";
我正在尝试显示college_infrastructure
表中名称列的所有行以及填充在college_infraitems
表中所需席位和可用列中的任何行。但现在它只从两个表中返回填充的细节。无论collegeId
如何,我都需要从college_infrastructure
表中获取所有类型的所有行。但是由于我提到collegeId
的where子句中的条件,只返回了两行。
如果大学id = 2,那么它只返回两行。我需要显示college_infrastructure
表中的所有名称和college_infraitems
表中的填充数据。任何人都可以告诉如何实现这个目标吗?
答案 0 :(得分:4)
使用LEFT JOIN
时, first 表中的条件会进入WHERE
子句。 second 表中的条件位于ON
子句中;否则,外连接将变为内连接:
SELECT ci.collegeInfrastructureId, ci.type, ci.name,
cli.requiredSeat, cli.available
FROM college_infrastructure ci LEFT JOIN
college_Infra_items cli
ON cli.collegeInfrastructureId = ci.collegeInfrastructureId AND
cli.collegeId = :collegeId
WHERE ci.type = :type
ORDER BY ci.collegeInfrastructureId asc;
此外,您不需要使用as
将列重命名为与其相同的名称。因此,默认情况下,ci.type
将被称为type
。无需使用ci.type as type
混乱查询。