带有 IF 语句的 MySQL VIEW

Posted

技术标签:

【中文标题】带有 IF 语句的 MySQL VIEW【英文标题】:MySQL VIEW with IF statement 【发布时间】: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_idnews_category_id,但news_file_path 的帖子,就像原来的问题一样?

谢谢, 保罗。

【问题讨论】:

【参考方案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_id0,则记录应在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”,但其余的都很好。谢谢:)

以上是关于带有 IF 语句的 MySQL VIEW的主要内容,如果未能解决你的问题,请参考以下文章

刀片视图:带有 OR/AND 条件的 if 语句

带有 BETWEEN 运算符的 MySQL IF 语句,未显示为有效

如何在 mySQL 的 SELECT 语句中使用 If 语句和关系运算符? [复制]

mysql语句where条件中的是啥意思

带有 LEFT JOIN 和 IF 语句的有限 GROUP_CONCAT

使用 if 语句时:类型 '()' 不能符合 'View';只有结构/枚举/类类型可以符合协议