我有一个表格,它要求我使用两行共享的唯一值将某些行配对在一起。
例如下表;
+--------+----------+-----------+-----------+----------------+-------------+
| id | type | member | code | description | matching |
+--------+----------+-----------+-----------+----------------+-------------+
| 1000 |transfer | 552123 | SC120314 | From Gold | |
| 1001 |transfer | 552123 | SC120314 | To Platinum | |
| 1002 |transfer | 833612 | SC120314 | From silver | |
| 1003 |transfer | 833612 | SC120314 | To basic | |
| 1004 |transfer | 457114 | SC150314 | From Platinum | |
| 1005 |transfer | 457114 | SC150314 | To silver | |
| 1006 |transfer | 933276 | SC180314 | From Gold | |
| 1007 |transfer | 933276 | SC180314 | From To basic | |
+--------+----------+-----------+-----------+----------------+-------------+
基本上我需要查询/例程做的是找到每行匹配的“成员”列中的值的行。然后查看找到的相同行的“代码”列中的值是否也匹配。
如果两行的两列都匹配,则为两行的“匹配”列分配一个值。此值对于两行应该相同并且仅对它们是唯一的。
唯一代码可以是任何东西,只要它是匹配行独有的。是否有任何查询/例程能够执行此操作?
最佳答案
我不确定我是否正确理解了这个问题,但是如果您想挑选并更新 code
和 member
列匹配的行并设置 将
匹配到每个相关行的某个唯一值,我相信这会起作用:
UPDATE <table> A
INNER JOIN (SELECT * FROM <table>) B ON
B.member = A.member && B.code = A.code && A.id <> B.id
SET A.matching = (A.id + B.id);
匹配值将设置为两行的 id
列的总和。 请注意,如果可以匹配的行超过两行,则以这种方式更新匹配
字段将不起作用。
对您的示例表运行上述查询将产生:
+------+----------+--------+----------+---------------+----------+
| id | type | member | code | description | matching |
+------+----------+--------+----------+---------------+----------+
| 1000 | transfer | 552123 | SC120314 | From Gold | 2001 |
| 1001 | transfer | 552123 | SC120314 | To Platinum | 2001 |
| 1002 | transfer | 833612 | SC120314 | From Silver | 2005 |
| 1003 | transfer | 833612 | SC120314 | To basic | 2005 |
| 1004 | transfer | 457114 | SC150314 | From Platinum | 2009 |
| 1005 | transfer | 457114 | SC150314 | To silver | 2009 |
| 1006 | transfer | 933276 | SC180314 | From Gold | 2013 |
| 1007 | transfer | 933276 | SC180314 | From To basic | 2013 |
+------+----------+--------+----------+---------------+----------+
关于mysql - 比较不同的行并得出结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28211949/