【发布时间】:2021-07-03 23:19:06
【问题描述】:
我有 2 个表:CHAT_INCOMING、CHAT_OUTGOING。 我想通过加入 id 并按时间排序从 2 个表中选择数据。 例如输出:
|ADD_TIME |CHAT_ID|CHAT_INCOMING|CHAT_OUTGOING |
|2019-01-01 10:00:01|1111 |Hello world | |
|2019-01-01 10:00:20|1111 | | Reply: hello |
|2019-01-01 10:00:23|1111 | | Reply: How are you?|
|2019-01-01 10:00:25|1111 |I am fine. | |
|2019-01-01 11:05:21|7585 |Where are you| |
|2019-01-01 11:06:01|7585 | |I am at school. |
SELECT ADD_TIME, A.CHAT_ID, A.CHAT AS CHAT_INCOMING,
B.CHAT AS CHAT_OUTGOING
from
(SELECT to_char(ADD_TIME,'yyyy-MM-dd hh24:mi:ss') ADD_TIME, CHAT_ID, CHAT
FROM CHAT_INCOMING
WHERE to_char(ADD_TIME,'yyyy-MM-dd') >= :from_time
AND to_char(ADD_TIME,'yyyy-MM-dd') <= :to_time
AND (CHAT_ID = :i_CHAT_ID or :i_CHAT_ID = N'-')
) A,
(SELECT to_char(SENT_ADD_TIME,'yyyy-MM-dd hh24:mi:ss') AS ADD_TIME, CHAT_ID, CHAT
FROM CHAT_OUTGOING
WHERE to_char(SENT_ADD_TIME,'yyyy-MM-dd') >= :from_time
AND to_char(SENT_ADD_TIME,'yyyy-MM-dd') <= :to_time
AND (CHAT_ID LIKE :i_CHAT_ID || '%')
) B
ORDER BY ADD_TIME ASC
我创建了这个查询,但它错过了SENT_ADD_TIME,CHAT_OUTGOING 是重复的。
输出如下所示
|ADD_TIME |CHAT_ID|CHAT_INCOMING|CHAT_OUTGOING |
|2019-01-01 10:00:01|1111 |Hello world |Reply: hello |
|2019-01-01 10:00:20|1111 |I am fine. |Reply: hello |
|2019-01-01 10:00:23|1111 |Where are you|Reply: hello |
我需要使用union all 或group by 还是别的什么?
【问题讨论】: