【问题标题】:Create a VIEW with null value in MySQL在 MySQL 中创建一个具有空值的 VIEW
【发布时间】:2017-01-08 05:58:18
【问题描述】:

我正在尝试通过加入 2 个这样的表在 MySQL 中创建一个视图:

用户表:

+----+------+  
| id | name |
+----+------+
| 1  | Joy  |
+----+------+
| 2  | Roy  |
+----+------+
| 3  | Tony |
+----+------+  

技能表:

+---------+---------+------------+
| auto_id | user_id | skill      |
+---------+---------+------------+
| 1       | 1       | PHP        |
+---------+---------+------------+
| 2       | 1       | CSS        |
+---------+---------+------------+
| 3       | 2       | Ruby       |
+---------+---------+------------+
| 4       | 2       | Javascript |
+---------+---------+------------+  

这里Skills表中的user_idUsers表中id外键

创建视图的查询:

CREATE OR REPLACE VIEW user_view AS SELECT u.id, u.name,  GROUP_CONCAT(s.skill) as 
skills FROM users u, skills s WHERE u.id = s.user_id GROUP BY u.id  

现在的问题是创建的视图只有 2 行,我知道这是因为 user_id 3 的技能表中没有值。现在我想要的是将所有具有 Tony 的 技能的 3 行设置为 Null 值,如下所示:

+---------+------+-----------------+
| user_id | name | skills          |
+---------+------+-----------------+
| 1       | Joy  | PHP,CSS         |
+---------+------+-----------------+
| 2       | Roy  | Ruby,Javascript |
+---------+------+-----------------+
| 3       | Tony | Null or empty   |
+---------+------+-----------------+

【问题讨论】:

    标签: mysql database view null


    【解决方案1】:

    您正在寻找Left join:

    CREATE OR REPLACE VIEW user_view AS
        SELECT 
            u.id,
            u.name,
            GROUP_CONCAT(s.skill) AS skills
        FROM
            users u
                LEFT JOIN
            skills s ON u.id = s.user_id
        GROUP BY u.id
    

    【讨论】:

    • 谢谢,这工作:)。那是因为我没有使用 LEFT JOIN 吗?而且我认为SEPARATOR 不是强制性的。
    • 是的,您的联接是内部联接,是的,separator 子句不是强制性的,但可以帮助您将其他字符用作分隔符。
    • 当然.. 抱歉投票迟了:P。我正在根据我的要求自己测试这段代码。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 2021-01-19
    • 2012-05-29
    • 2019-08-01
    相关资源
    最近更新 更多