我有这个数据库
CREATE TABLE user_auth_custom (
id serial,
name VARCHAR ( 255 )
);
CREATE TABLE payment_action (
id serial,
user_auth_custom_id integer,
message VARCHAR ( 255 )
);
CREATE TABLE work_action (
id serial,
user_auth_custom_id integer,
message VARCHAR ( 255 )
);
INSERT INTO user_auth_custom VALUES
(1, 'borris'),
(2, 'jeremy'),
(3, 'joe'),
(4, 'barry');
INSERT INTO payment_action VALUES
(1, 1, 'Paid $20'),
(2, 1, 'Paid $340'),
(3, 1, 'Paid $12'),
(4, 2, 'Paid $120');
INSERT INTO work_action VALUES
(1, 1, 'Submitted work abc'),
(2, 1, 'did stuff'),
(3, 1, 'more things'),
(4, 1, 'loafing about'),
(5, 1, 'dancing'),
(6, 1, 'push ups'),
(7, 1, 'monwalk'),
(8, 2, 'balanced books'),
(9, 2, 'read mind');
用户1(borris)有3个付款操作和7个工作操作。
我想以这种格式返回10个结果:
用户Id
|
消息
|
动作类型
|
1.
|
付了20美元
|
付款
|
1.
|
做了些什么
|
工作
|
等
我的想法是将付款和工作表都加入到客户记录中。我认为这将生成10条记录,其中工作或付款字段为空。然后我可以检查/合并得到结果。比如:
select u.id user_id, COALESCE (wa.message, pa.message, '') message,
case
when pa.id is not null then 'Payment'
when wa.id is not null then 'Work'
end action_type
from user_auth_custom u
LEFT JOIN work_action wa ON u.id = wa.user_auth_custom_id
LEFT JOIN payment_action pa ON u.id = pa.user_auth_custom_id
where (pa.id != null or wa.id != null)
and.id = 1
但它的行为不像我想象的那样。
以我要求的格式获取数据的正确方法是什么?