基于上一次查询的结果更新表

kqhtkvqz  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(413)

如何根据上一个查询的结果更新表?
最初的查询(感谢gmb)可以在address(users表)中找到与address(address\u effect表)匹配的任何项。
从这个查询的结果中,我想在address\u effect表中找到address的计数,并将其添加到“users”表的一个新列中。例如,john doe在address列中与idaho和usa匹配,因此在count列中显示count为'2'。
仅供参考,我正在用xampp(使用mariadb)在本地系统上测试这个。

用户表

  1. +--------+-------------+---------------+--------------------------+--------+
  2. | ID | firstname | lastname | address | count |
  3. | | | | | |
  4. +--------------------------------------------------------------------------+
  5. | 1 | john | doe |james street, idaho, usa | |
  6. | | | | | |
  7. +--------------------------------------------------------------------------+
  8. | 2 | cindy | smith |rollingwood av,lyn, canada| |
  9. | | | | | |
  10. +--------------------------------------------------------------------------+
  11. | 3 | rita | chatsworth |arajo ct, alameda, cali | |
  12. | | | | | |
  13. +--------------------------------------------------------------------------+
  14. | 4 | randy | plies |smith spring, lima, peru | |
  15. | | | | | |
  16. +--------------------------------------------------------------------------+
  17. | 5 | Matt | gwalio |park lane, atlanta, usa | |
  18. | | | | | |
  19. +--------------------------------------------------------------------------+

地址影响表

  1. +---------+----------------+
  2. |address |effect |
  3. +---------+----------------+
  4. |idaho |potato, tater |
  5. +--------------------------+
  6. |canada |cold, tundra |
  7. +--------------------------+
  8. |fremont | crowded |
  9. +--------------------------+
  10. |peru |alpaca |
  11. +--------------------------+
  12. |atlanta |peach, cnn |
  13. +--------------------------+
  14. |usa |big, hard |
  15. +--------+-----------------+
aij0ehis

aij0ehis1#

使用返回匹配数的相关子查询:

  1. UPDATE user u
  2. SET u.count = (
  3. SELECT COUNT(*)
  4. FROM address_effect a
  5. WHERE FIND_IN_SET(a.address, REPLACE(u.address, ', ', ','))
  6. )

请看演示。
结果:

  1. > ID | firstname | lastname | address | count
  2. > -: | :-------- | :--------- | :------------------------- | ----:
  3. > 1 | john | doe | james street, idaho, usa | 2
  4. > 2 | cindy | smith | rollingwood av,lyn, canada | 1
  5. > 3 | rita | chatsworth | arajo ct, alameda, cali | 0
  6. > 4 | randy | plies | smith spring, lima, peru | 1
  7. > 5 | Matt | gwalio | park lane, atlanta, usa | 2
展开查看全部
yruzcnhs

yruzcnhs2#

注意:我在mysql中检查了它,但在mariadb中没有。
可以使用带有内部联接的update语句更新users表的count列。然后您可以使用一个查询,该查询将原始查询修改为使用“groupby”。

  1. UPDATE users AS u
  2. INNER JOIN
  3. (
  4. -- your original query modified
  5. SELECT u.ID AS ID, count(u.ID) AS count
  6. FROM users u
  7. INNER JOIN address_effect a
  8. ON FIND_IN_SET(a.address, REPLACE(u.address, ', ', ','))
  9. GROUP BY u.ID
  10. ) AS c ON u.ID=c.ID
  11. SET u.count=c.count;

相关问题