mysql - 比较不同的行并得出结果

标签 mysql database sql-update

我有一个表格,它要求我使用两行共享的唯一值将某些行配对在一起。

例如下表;

+--------+----------+-----------+-----------+----------------+-------------+
| 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 |             |
+--------+----------+-----------+-----------+----------------+-------------+

基本上我需要查询/例程做的是找到每行匹配的“成员”列中的值的行。然后查看找到的相同行的“代码”列中的值是否也匹配。

如果两行的两列都匹配,则为两行的“匹配”列分配一个值。此值对于两行应该相同并且仅对它们是唯一的。

唯一代码可以是任何东西,只要它是匹配行独有的。是否有任何查询/例程能够执行此操作?

最佳答案

我不确定我是否正确理解了这个问题,但是如果您想挑选并更新 codemember 列匹配的行并设置 匹配到每个相关行的某个唯一值,我相信这会起作用:

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/

相关文章:

mysql - MySQL 数据库的结构

php - Sql 查询执行超过 smarty 的时间

php - fatal error : Call to a member function bind_param() on a non-object when updating

mysql - 我如何建模这个数据库来处理这个查询

mysql - 为什么锁定读取忽略隔离级别?

postgresql - 如何更有效地更新此表中的 13 亿行?

python - 如何随机为 MySQL 列提供种子?

MySQL:使用 LOAD DATA 按时间导入数据(字符串)

java - mysql 中的登录表单

php - 价格数据的数据库设计