左连接,我需要有关代码的解释

时间:2017-12-09 11:17:30

标签: mysql left-join

我在看教程。有一个代码,我不明白应该做什么。

$sql = 'SELECT p.*, 
      a.screen_name AS author_name, 
      c.name AS category_name
    FROM 
      posts p
      LEFT JOIN 
        admin_users a ON p.author_id = a.id
      LEFT JOIN 
        categories c ON p.category_id = c.id
    WHERE 
      p.id = ?';

我读到了左连接,但我不理解它们。有人可以解释一下我分享的代码。 提前致谢!

1 个答案:

答案 0 :(得分:2)

想象一下,你有两张桌子。一个用于存储有关您网站上程序员的信息,另一个用于跟踪他们的在线购买情况。

程序员表

+--------------------------------------------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Desire   |  32 | 123 fake s|  3000.00 |
|  2 | Jamin    |  25 | 234 fake s|  2500.00 |
|  3 | Jon      |  23 | 567 fake s|  2000.00 |
|  4 | Bob      |  30 | 789 fake s|  1500.00 |
|  5 | OtherGuy |  31 | 890 fake s|  1000.00 |
|  6 | DudeMan  |  32 | 901 fake s|   500.00 |
+--------------------------------------------+

购买表

+---------------------------------------------+
| ORDER_ID    | PROG_ID |    DATE    | PRICE  | 
+-------------+---------+---------------------|
|  1          | 1       |  1-1-2017  | 100    |
|  2          | 2       |  1-2-2017  | 200    |
|  3          | 6       |  1-3-2017  | 300    |
+---------------------------------------------|

您决定需要创建一个新表来将此信息合并到包含的表中 你想要的某些列。

例如,您认为为了运输目的而拥有一张桌子会很不错 具有ID,NAME,PRICE和DATE列。

目前,我们的表格并未在一个表格中显示所有内容。

如果我们要LEFT JOIN这些表,我们最终将填充所需的列 如果没有要加入的信息,则为NULL值。

SELECT ID, NAME, PRICE, DATE
    FROM PROGRAMMERS
    LEFT JOIN PURCHASES
    ON PROGRAMMERS.ID = PURCHASES.PROG_ID;

请注意,我从起始表中选择了我想要的列,然后加入了右表 即使可能缺少信息。

结果表

+-------------------------------------+
| ID | NAME     | PRICE   |   DATE    |
+----+----------+-----------------+---+
|  1 | Desire   | 100     | 1-1-2017  |
|  2 | Jamin    | 200     | 1-2-2017  |
|  3 | Jon      | NULL    |   NULL    |
|  4 | Bob      | NULL    |   NULL    |
|  5 | OtherGuy | NULL    |   NULL    |
|  6 | DudeMan  | 300     | 1-3-2017  |
+-------------------------------------+

有关SQL JOIN之间差异的直观表示,请查看 https://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins