我有一张contents桌子.
+------------+------+----------+
| content_id | year | has_file |
+------------+------+----------+
| 1 | 2017 | true |
| 2 | 2018 | true |
| 3 | 2016 | true |
| 4 | 2018 | true |
| 5 | 2018 | false |
+------------+------+----------+
Run Code Online (Sandbox Code Playgroud)
然后我有uploads桌子.
+----+------------+------------+
| id | content_id | filename |
+----+------------+------------+
| 1 | 2 | sample.jpg |
+----+------------+------------+
Run Code Online (Sandbox Code Playgroud)
我想根据最近一年获取数据,然后是否有文件.
我可以使用查询来做到这一点SELECT * FROM contents ORDER BY year DESC, has_file DESC.
问题不是所有has_file设置为的true记录实际记录在uploads表上.
是否可以通过添加排除其他表上不存在的所有记录WHERE EXISTS (SELECT 1 FROM uploads WHERE uploads.content_id = contents.content_id).
但是我不想排除它,我只是希望它出现在最后,并且带有文件的记录首先出现.这可能吗?
预期结果:
+------------+------+----------+
| content_id | year | has_file |
+------------+------+----------+
| 2 | 2018 | true |
| 4 | 2018 | true |
| 5 | 2018 | false |
| 1 | 2017 | true |
| 3 | 2016 | true |
+------------+------+----------+
Run Code Online (Sandbox Code Playgroud)
只需将EXISTS子句添加到ORDER BY查询的子句中:
SELECT *
FROM contents
ORDER BY year DESC,
has_file DESC,
EXISTS (SELECT 1 FROM uploads WHERE uploads.content_id = contents.content_id) DESC
Run Code Online (Sandbox Code Playgroud)
输出:
content_id year has_file
2 2018 true
4 2018 true
5 2018 false
1 2017 true
3 2016 true
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |