带有 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_id
、news_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_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”,但其余的都很好。谢谢:)以上是关于带有 IF 语句的 MySQL VIEW的主要内容,如果未能解决你的问题,请参考以下文章
带有 BETWEEN 运算符的 MySQL IF 语句,未显示为有效
如何在 mySQL 的 SELECT 语句中使用 If 语句和关系运算符? [复制]