【问题标题】:Mysql left join with another table with passed variableMysql与另一个带有传递变量的表左连接
【发布时间】:2011-12-17 14:40:42
【问题描述】:

我有 2 个名为 projectstracklines 的表 每个项目都可以有多个轨迹线。

我有一个 SQL 语句将遍历我的项目,但我希望能够加入只有 1 行的 trackline 表。我想要做的是获取属于项目一部分的所有轨道线,根据多个字段对它们进行排序并对其执行 LIMIT 1 以便我有一条轨道线加入我的项目。

这是我目前所拥有的:

SELECT Project.* FROM `project` AS `Project`
LEFT JOIN (
    SELECT *
    FROM `trackline`
    WHERE `trk_deleted` = '0'
    ORDER BY `trk_state`, `trk_status`
    LIMIT 1
) t ON t.`trk_project` = `prj_id`
ORDER BY `prj_name`

问题是我在外部查询中没有得到trk_statetrk_status 值。

我在想我的子查询可能有 WHERE trk_project = prd_id 但我不知道如何实现。

【问题讨论】:

    标签: php mysql join subquery left-join


    【解决方案1】:

    您还需要从该派生表中提取值:

    SELECT Project.*, t.*
    FROM ...
    

    现在它只从 Project 表中检索字段。

    【讨论】:

    • 我忘了提到我已经这样做了,即使我的代码没有提供它。我遇到的主要问题是,如果我从联接中删除“LEFT”,则不会返回任何结果集,这意味着没有进行任何联接。我认为我用来加入 2 个表的逻辑有问题。
    • 将其设为 JOIN 使其成为默认的 INNER JOIN,只有在查询的两边都有匹配的记录时,您才能在哪里得到结果 - 这意味着您的 ON 子句在连接工作不正常。
    • 是的,我了解 JOINS 和 LEFT JOINS 之间的区别。如果我在不使用子查询的情况下进行 LEFT JOIN,我会得到结果。我猜我正在使用的方法是导致连接不起作用的原因。
    • 子查询中是否需要该限制?这导致它只返回一条要加入的记录。很可能您的项目表中没有任何记录与该单条记录匹配,因此内连接不会产生任何结果。
    • 有什么方法可以将条件 trk_project = prj_id 带入子查询。我希望子查询最多返回 1 个结果。子查询不喜欢prj_id
    猜你喜欢
    • 1970-01-01
    • 2013-08-25
    • 2014-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多