【问题标题】:Join two SQL tables with each other using two columns使用两列连接两个 SQL 表
【发布时间】:2012-06-10 11:08:29
【问题描述】:

问题:

我正在尝试将评分表 (betyg_essays) 中两列中的 ID“翻译”为另一个表 (betyg_users) 中这些用户的真实姓名。

评分表 (betyg_essays) 如下所示:

用户表 (betyg_users) 如下所示:

PHP 代码(目前为止):

$query = 'SELECT * FROM betyg_essays JOIN betyg_users ON betyg_essays.Examiner = betyg_users.UID';

Examiner/Supervisor 列 (betyg_essays) 对应于 UID 列 (betyg_users)。

所需的输出应该是(使用名字/姓氏列):

  1. 考官:约翰·霍普金斯。主管:Mike Baker。
  2. 考官:约翰·霍普金斯。主管:Mike Baker。

不工作的 SQL 查询:

$query = "SELECT 
            (u1.Firstname + ' ' + u1.Lastname) AS Examiner, 
            (u2.Firstname + ' ' + u2.Lastname) AS Supervisor
        FROM betyg_essays grade
            INNER JOIN betyg_users u1 ON grade.Examiner = u1.UID
            INNER JOIN betyg_users u2 ON grade.Supervisor = u2.UID";

【问题讨论】:

    标签: php mysql sql join


    【解决方案1】:
    SELECT
    CONCAT(u1.FirstName, ' ', u1.LastName) AS Examiner,
    CONCAT(u2.FirstName, ' ', u2.LastName) AS Supervisor
    FROM betyg_essays e
    INNER JOIN betyg_users u1 ON e.Examiner = u1.UID
    INNER JOIN betyg_users u2 ON e.Supervisor = u2.UID
    

    我没试过代码,你可能需要做一些调整。

    更新:修正了 id 的

    INNER JOIN betyg_users u2 ON e.Supervisor = u2.UID
    

    更新2:

    我已将 + 更改为 CONCAT 函数。显然,MySQL 处理字符串的方式与 SQL Server 不同。

    【讨论】:

    • 我已经尝试过你的代码,但输出只给了我 0 0 和 0 0。我已经更新了我在问题中使用的代码。
    • @kexxcream 我已经改变了我的答案,我不知道 mysql 不允许 + 仅对数字进行操作:/
    【解决方案2】:

    这里需要加入 user_table 两次,第一次获取考官用户名,第二次获取主管用户名

    SELECT (g1.FirstName + ' ' + g1.LastName) AS Examiner,' , (g2.FirstName + ' ' + g2.LastName) AS Supervisor
    FROM grading_table grade
    INNER JOIN user_table g1 ON grade.examiner = g1.uid
    INNER JOIN user_table g2 ON grade.supervisor = g2.uid
    

    【讨论】:

    • 谢谢,但我希望在 Examiner 和 Supervisor 中合并名字和姓氏。
    • 不客气。我已经更新了我的答案,它会给你结合名字和姓氏
    【解决方案3】:

    最终解决方案:

    $query = "SELECT 
                CONCAT (u1.Firstname, ' ', u1.Lastname) AS Examiner, 
                CONCAT (u2.Firstname, ' ', u2.Lastname) AS Supervisor
            FROM betyg_essays grade
                INNER JOIN betyg_users u1 ON grade.Examiner = u1.UID
                INNER JOIN betyg_users u2 ON grade.Supervisor = u2.UID";
    

    【讨论】:

      【解决方案4】:

      试试这个

      SELECT CONCAT(betyg_users.`Firstname`," ",betyg_users.`Lastname`) AS `examiner_name`,
      CONCAT(betyg_users.`Firstname`," ",betyg_users.`Lastname`) AS `superviser_name`
      FROM `betyg_essays`
      INNER JOIN `betyg_users` ON betyg_essays.`Examiner` = betyg_users.`UID` 
      INNER JOIN `betyg_users` ON betyg_essays.`Supervisor` = betyg_users.`UID`;
      

      【讨论】:

      • 这很好用,但我希望在 Examiner 和 Supervisor 中结合 Firstname/Lastname。
      猜你喜欢
      • 1970-01-01
      • 2014-05-11
      • 2012-02-28
      • 2012-05-01
      • 1970-01-01
      • 2022-08-19
      • 2021-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多