【问题标题】:MySQL VIEW with IF statement带有 IF 语句的 MySQL VIEW
【发布时间】:2012-10-21 18:06:10
【问题描述】:

我在 mMySQL 中有两个表:

 - news (news_id, news_titel, news_file_id)
 - files (file_id, file_path, file_name)

我想用这些列创建 MySQL VIEW:

- news_view (news_id, news_title, news_file_id, news_file_path)

但是,如果 news_file_id > 0 那么,我得到文件的路径 (file_path + file_name) 否则 news_file_path 应该是 0

我该如何做这个视图?

编辑

但如果我想再添加两个表怎么办:

categories (category_id, category_name)
users(user_id, user_name)

表 news 更改为

news (news_id, news_title, news_file_id, news_author_id, news_category_id)

并且视图应该只显示带有指定news_author_id、news_category_id,但news_file_path 的帖子,就像原来的问题一样?

谢谢, 保罗。

【问题讨论】:

    标签: mysql view if-statement


    【解决方案1】:

    试试下面:

     CREATE VIEW news_view  
       as (SELECT news_id, news_titel, news_file_id, 
           IF(news_file_id > 0, CONCAT(file_path, file_name), 0)
               AS news_file_path
           FROM news a LEFT JOIN files b
                ON a.news_file_id= b.file_id
             JOIN categories cat
                ON a.news_category_id = cat.category_id
             JOIN users u
                ON a.news_author_id = u.user_id
          );
    

    根据需要添加where 条件。

    【讨论】:

    • 你遇到了什么问题?我的if 语句中有一个额外的大括号,我删除了它。应该可以正常工作。
    • 是的,我更正了。有一个额外的大括号 :( 输入错误。
    • @user1763491 糟糕,我注意到你想要0。我在查询中替换了它。看起来我输入的答案有点匆忙。
    • 你的意思是,如果files中不存在相关记录,则它不会显示,或者即使相关记录存在,仍然无法获取?
    • 如果news_file_id 是0,则记录应在news_file_path 列和0 列中显示。以您的方式,如果单个帖子有news_file_path = 0,那么它不在视图中
    【解决方案2】:

    试试这个,你可以根据你的情况使用CASE,

    CREATE VIEW myView
    AS
    SELECT  a.news_id, a.news_title,
            a.news_file_id,
            CASE 
                WHEN news_file_id = 0 THEN 0
                ELSE CONCAT(file_path, file_name)
            END news_file_path
    FROM    news a
            LEFT JOIN files b
                ON a.news_file_id = b.file_id
    

    【讨论】:

    • 我的主人! :) 效果很好。你忘记了“AS”,但其余的都很好。谢谢:)
    猜你喜欢
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    • 2015-01-21
    • 2020-09-22
    • 2012-01-27
    • 2016-08-15
    • 2014-10-26
    相关资源
    最近更新 更多