mysql - MySQL 排序让人头疼
问题描述
我有一个包含名字和姓氏的表,我想检查是否没有交换数据。
桌子
+----+-----------+----------+
| Id | firstname | lastname |
+----+-----------+----------+
| 0 | Raphael | Thomas |
| 1 | Robert | Vincent |
| 2 | Philippe | Michel |
| 3 | Vincent | Robert |
| 4 | Thomas | Raphael |
+----+-----------+----------+
我想对结果进行分组,然后突出显示任何一对
预期结果
+----+-----------+----------+
| Id | firstname | lastname |
+----+-----------+----------+
| 0 | Raphael | Thomas |
| 4 | Thomas | Raphael |
| 1 | Robert | Vincent |
| 3 | Vincent | Robert |
+----+-----------+----------+
这在 fisrtname+lastname 的字符数不同但总和相同时有效
SELECT t1.id, t1.lastname, t1.firstname
FROM table t1 JOIN table t2 ON t2.lastname = t1.firstname AND t2.firstname = t1.lastname
ORDER BY length(t1.lastname)+length(t1.firstname)
我也尝试转换为 HEX 并对 HEX 结果求和,但出现“DOUBLE 值超出范围”错误。
我该如何解决这个问题?
解决方案
您可以在这里使用LEAST
/GREATEST
技巧:
SELECT
Id,
firstname,
lastname
FROM yourTable t1
WHERE EXISTS (SELECT 1 FROM yourTable t2 WHERE t2.Id <> t1.Id AND
t2.lastname = t1.firstname AND t2.firstname = t1.lastname)
ORDER BY
LEAST(firstname, lastname),
GREATEST(firstname, lastname);
演示
推荐阅读
- android - 如何阻止相同的广播(来自 PendingIntent)排队?
- amazon-web-services - amazon s3 预签名的 url 应该使用新的访问密钥辞职
- javascript - 将数组传递给 JavaScript 显示为 Object
- java - jhipster为什么不更新
- html - 使用 css 反映 svg
- android - Firebase 验证 Id 令牌,但客户端尚未准备好,所以我不知道来自客户端的数据包含
- css-selectors - DomCrawler 第二个等孩子
- node.js - 为什么我的节点 js express 应用程序不能保持活动状态?
- java - Java:使所有字段成为最终字段或可变字段?
- python - 在 Paramiko 的 SFTP 路径中使用环境变量