如何解决具有相同字符串但uiid和位置在另一个表中的位置不同的OrderBy行
我正在将SQL与Doctrine和Symphony 4.4结合使用,并使用简单的SQL查询,例如:
$query = $em->createQuery("SELECT u FROM User u JOIN u.address a WHERE a.city = 'Berlin'");
$users = $query->getResult();
我的问题是 我有两个桌子:
Table A
[UIID name]
Table B
[UIID] is a reference key of UIID table A
例如(为使示例更简单,UIID为int):
A
1 Alpha
2 Alpha
3 Beta
4 Charlie
5 Delta
6 Delta
B
2
我喜欢这样做:
SELECT UIID NAME
FROM A
GROUP BY UIID,ORDER BY NAME
但是要使元素也出现在表B中,而在要素之后也只出现表A:
2 Alpha
1 Alpha
3 Beta
4 Charlie
5 Delta
6 Delta
我知道uiid v1与其他版本的时间戳位置之间存在差异。
我无法修改数据库的ID,所以我问自己是否有一条类似LIKE
的指令,而无需创建具有ID和时间戳的新表。
SELECT UIID NAME
FROM A
GROUP BY UIID,ORDER BY UIID
但是我想说:
SELECT UIID NAME
FROM A
GROUP BY UIID,ORDER BY NAME
解决方法
通过表的LEFT
连接:
SELECT A.UIID,A.name
FROM A LEFT JOIN B
ON B.UIID = A.UIID
ORDER BY B.UIID IS NULL,A.NAME
表达式:
B.UIID IS NULL
将0
或1
的值评估为false
或true
,因此2个表的所有匹配行都将位于顶部。
>
或使用EXISTS
:
SELECT A.UIID,A.name
FROM A
ORDER BY EXISTS (SELECT 1 FROM B WHERE B.UIID = A.UIID) DESC,A.NAME
请参见demo。
结果:
| UIID | name |
| ---- | ------- |
| 2 | Alpha |
| 1 | Alpha |
| 3 | Beta |
| 4 | Charlie |
| 5 | Delta |
| 6 | Delta |
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。