mysql 视图 多个 select_mysql – 从具有不同列名的两个表创建视图

本文探讨了如何在MySQL中创建视图,当涉及的两个表具有不匹配的列名时。通过使用UNION ALL操作,作者展示了如何在保持列一致性的前提下合并post_rank_activity和reply_rank_activity表。解决方案是在每个SELECT语句中显式声明NULL值以匹配列结构。
摘要由CSDN通过智能技术生成

有没有办法从两个表创建视图,其中一个列在两个表中是不同的?我目前遇到的问题是MYSQL告诉我有一个未定义的索引 – 这是完全合理的,因为在一半的情况下,该列将不存在.

表格布局:

(post_rank_activity)

ID, post_id, ... date

(reply_rank_activity)

ID, rank_id, ... date

我希望结果视图看起来像:

ID | Post_id | Reply_id | Date

x x NULL x

x NULL x x

和SQL:

$rankView = "Create or replace view userRank as (

select PRA.id, PRA.post_id, PRA.user_id, PRA.vote_up, PRA.rank_date

From post_rank_activity PRA)

union All

(select RRA.id, RRA.reply_id, RRA.user_id, RRA.vote_up, RRA.rank_date

from reply_rank_activity RRA)";

我得到的结果,而不是返回null,它返回“post_id”字段的“reply_id”值,然后将所有其他值转移 – 见下文:

ID | Post_id | Reply_id | Date

x x date val x

x reply val date val x

有任何想法吗?

解决方法:

联合必须在所有部分中以相同的顺序包含相同的列.您应该在联合的每个部分中显式选择/声明空列:

SELECT PRA.id, PRA.post_id, NULL AS reply_id, PRA.user_id, PRA.vote_up, PRA.rank_date

FROM post_rank_activity PRA

UNION All

SELECT RRA.id, NULL AS post_id, RRA.reply_id, RRA.user_id, RRA.vote_up, RRA.rank_date

FROM reply_rank_activity RRA

标签:mysql,view

来源: https://codeday.me/bug/20190725/1536767.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值