我有下表:
来源:
**id | name**
1 source1
2 source2
3 source3
4 source4
项目:
**id | name | sourceId | created_at**
1 item3 3 2018-08-09 07:28:17
2 item2 2 2018-08-09 07:30:00
sql:
SELECT
sources.id,
sources.name
FROM
sources
LEFT JOIN
items
ON items.sourceId = sources.id
ORDER BY items.created_at DESC, sources.id
期望:
**id | name**
2 source2
3 source3
1 source1
4 source4
说明:
我需要一个结果,其中包含源表中的所有源,但按最近使用过的源(分配给项的源)进行排序。以某种方式,第一个结果是源表中的结果,然后按desc顺序可以可以在项目表中找到,如下所示:
实际结果:
**id | name**
1 source1
4 source4
2 source2
3 source3
我通过第二个SQL设法获得了期望的结果,但是我认为我的第一次尝试也有解决方案:
(SELECT
sources.id,
sources.name
FROM
sources
INNER JOIN
items
ON items.sourceId = sources.id
ORDER BY items.created_at DESC, sources.id)
UNION ALL
(SELECT
sources.id,
sources.name
FROM
sources
LEFT JOIN
items
ON items.sourceId = sources.id
WHERE items.sourceId IS NULL)
上述sql的另一个问题是,我不太了解为什么在使用UNION时订单混乱,但是在使用UNION ALL时订单正确。据我所知,唯一的区别是UNION消除了重复项,而UNION ALL却没有
答案 0 :(得分:2)