首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合并UNION ALL行以删除空值

合并UNION ALL行以删除空值
EN

Stack Overflow用户
提问于 2015-03-02 00:19:20
回答 2查看 10.2K关注 0票数 0
代码语言:javascript
复制
SELECT journey.id, TIME_FORMAT(ADDTIME(journey.departure, SEC_TO_TIME(SUM(l1.elapsed))), '%H:%i') AS departure, null AS arrival
FROM journey
INNER JOIN journey_day ON journey_day.journey = journey.code
INNER JOIN pattern ON pattern.code = journey.pattern
INNER JOIN link l1 ON l1.section = pattern.section AND l1.stop = "370023139"
INNER JOIN link l2 ON l2.section = pattern.section AND l2.id <= l1.id
WHERE journey.service = "11-252-_-y08-1" AND journey_day.day = 1 AND journey.code NOT IN (SELECT journey
                                                                                          FROM journey_non_operation
                                                                                          WHERE "2015-03-01" BETWEEN date_start AND date_end) AND pattern.direction = "outbound"
GROUP BY journey.id

UNION ALL

SELECT journey.id, null AS departure, TIME_FORMAT(ADDTIME(journey.departure, SEC_TO_TIME(SUM(l1.elapsed))), '%H:%i') AS arrival
FROM journey
INNER JOIN journey_day ON journey_day.journey = journey.code
INNER JOIN pattern ON pattern.code = journey.pattern
INNER JOIN link l1 ON l1.section = pattern.section AND l1.stop = "1000DEHS7812"
INNER JOIN link l2 ON l2.section = pattern.section AND l2.id <= l1.id
WHERE journey.service = "11-252-_-y08-1" AND journey_day.day = 1 AND journey.code NOT IN (SELECT journey
                                                                                          FROM journey_non_operation
                                                                                          WHERE "2015-03-01" BETWEEN date_start AND date_end) AND pattern.direction = "outbound"
GROUP BY journey.id

上面是两个查询,它们的结果由UNION ALL子句合并。您将注意到,查询返回不同的列,一个名为“离开”,另一个名为“到达”。为了让UNION使用不同的列名,我必须为另一个列指定NULL,这样它就不会忽略它,也不会在查询中包含它。

我的问题是我的结果看起来像这样:

id | departure | arrival

1 asd NULL

2 asd NULL

3 asd NULL

4 asd NULL

5 NULL efg

6 NULL efg

7 NULL efg

8 NULL efg

如何合并这些行,以便根据ID匹配asdefg

期望的结果:

id | departure | arrival

1 asd efg

2 asd efg

3 asd efg

4 asd efg

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-02 00:36:45

只需对结果集应用聚合函数(min/max)即可。由于nulls不包括在聚合中,因此您将仅获得组合结果:

代码语言:javascript
复制
select id, min(departure), min(arrival)
from (your query) as q
group by id
票数 4
EN

Stack Overflow用户

发布于 2015-03-02 00:39:32

我不知道你为什么要尝试建立联盟。

尝试这样做:

代码语言:javascript
复制
SELECT journey.id, 
    TIME_FORMAT(ADDTIME(journey.departure, SEC_TO_TIME(SUM(l1.elapsed))), '%H:%i') AS departure, 
    TIME_FORMAT(ADDTIME(journey.departure, SEC_TO_TIME(SUM(l2.elapsed))), '%H:%i') AS arrival
FROM journey
INNER JOIN pattern 
ON pattern.code = journey.pattern
INNER JOIN link l1 
ON l1.section = pattern.section 
    AND l1.stop = "370023139"
INNER JOIN link l2 
ON l2.section = pattern.section 
    AND l2.stop = "1000DEHS7812"
    AND l2.id <= l1.id
WHERE journey.service = "11-252-_-y08-1" 
    AND journey_day.day = 1 
    AND journey.code NOT IN (
        SELECT journey
        FROM journey_non_operation
        WHERE "2015-03-01" BETWEEN date_start AND date_end) 
    AND pattern.direction = "outbound"
GROUP BY journey.id
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28795877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档