2
之后替换NULL列我正在使用UNION组合两个select语句的结果。在一个声明中,我找到sender
的identity
,在另一个声明中我找到recipient
的identity
。我遇到的问题是,我的行数始终是“应该”的两倍,因为收件人结果始终会有一个“空白”sender
,发件人结果的空白将会是“空白”recipient
。我怎样才能重组这个结果为每个交易都返回一行,同时填入sender
和recipient
?在SQL UNION
(
SELECT s.id, s.sender_id, '' AS sender, NOW() AS sender_create_date, s.recipient_id,
MAX(c.identity) AS recipient, MAX(c.create_date) AS recipient_create_date
FROM db.sales s
LEFT JOIN db.customers c ON c.participant_id = s.recipient_id
WHERE sender_id = $1
OR recipient_id = $1
GROUP BY s.id
)
UNION
(
SELECT s.id, MAX(c.identity) AS sender, MAX(c.create_date) AS sender_create_date, s.recipient_id,
'' AS recipient, NOW() AS recipient_create_date
FROM db.sales s
LEFT JOIN db.customers c ON c.participant_id = s.recipient_id
WHERE sender_id = $1
OR recipient_id = $1
GROUP BY s.id
)
这里是我的一个交易目前的结果的一个例子:
id | sender | sender_create_date | recipient | recipient_create_date
1 | bob | 11/1/2016 | | 11/22/2016
1 | | 11/22/2016 | jill | 11/5/2016
我所瞄准的是:
id | sender | sender_create_date | recipient | recipient_create_date
1 | bob | 11/1/2016 | jill | 11/5/2016
试着描述你希望查询实际执行。 –
为什么一个工会呢? (联盟是导致多行的原因,似乎需要2次加入客户,一次发件人,一次收件人(请注意,您可能会获得4条记录,UNION正在清除2.) – xQbert
@xQbert不幸的是,'c.participant_id'不是唯一的''db.customers'可以包含多行'participant_id',我想为'participant_id'获取最近的'c.create_date'。 – MattDionis