3

有没有办法从两个表中创建一个视图,其中一个列在两个表中是不同的?我目前遇到的问题是 MYSQL 告诉我有一个undefined index- 这是非常有意义的,因为在一半的情况下,该列将不存在。

表布局:

(post_rank_activity)
ID, post_id, ... 日期

(reply_rank_activity)
ID, rank_id, ... 日期

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

身份证 | Post_id | 回复ID | 日期
xx 空 x
x 空 xx

和 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,而是reply_id为“ post_id”字段返回“”的值,然后将所有其他值转移过来——见下文:

身份证 | Post_id | 回复ID | 日期
xx 日期 val x
x 回复 val date val x

有任何想法吗?

4

2 回答 2

5

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

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
于 2012-11-09T17:48:23.000 回答
3

您的查询应如下所示

select PRA.id, PRA.post_id, null as Reply_id PRA.rank_date
From post_rank_activity PRA
union All
select RRA.id, null as post_id, RRA.reply_id, RRA.rank_date
from reply_rank_activity RRA
于 2012-11-09T17:48:52.067 回答