簡體   English   中英

根據先前查詢的結果更新表

[英]Updating table based on the results of previous query

如何根據上一個查詢的結果更新表?

原始查詢(非常感謝GMB )可以在地址(用戶表)中找到與地址(地址效果表)匹配的任何項目。

從這個查詢的結果中,我想在 address_effect 表中找到地址的計數,並將其添加到表“users”中的一個新列中。 例如,john doe 在地址列中與 idaho 和 usa 匹配,因此它將在計數列中顯示計數“2”。

僅供參考,我正在使用 XAMPP(使用 MariaDB)在我的本地系統上對此進行測試。

用戶表

+--------+-------------+---------------+--------------------------+--------+
|    ID  |  firstname  |  lastname     |    address               |  count |
|        |             |               |                          |        |
+--------------------------------------------------------------------------+
|     1  |    john     |    doe        |james street, idaho, usa  |        |                    
|        |             |               |                          |        |
+--------------------------------------------------------------------------+
|     2  |    cindy    |   smith       |rollingwood av,lyn, canada|        |
|        |             |               |                          |        |
+--------------------------------------------------------------------------+
|     3  |    rita     |   chatsworth  |arajo ct, alameda, cali   |        |
|        |             |               |                          |        |
+--------------------------------------------------------------------------+
|     4  |    randy    |   plies       |smith spring, lima, peru  |        |                       
|        |             |               |                          |        |
+--------------------------------------------------------------------------+
|     5  |    Matt     |   gwalio      |park lane, atlanta, usa   |        |
|        |             |               |                          |        |
+--------------------------------------------------------------------------+

地址效果表

+---------+----------------+
|address   |effect         |
+---------+----------------+
|idaho    |potato, tater   |
+--------------------------+
|canada   |cold, tundra    |
+--------------------------+
|fremont  | crowded        |
+--------------------------+
|peru     |alpaca          |
+--------------------------+
|atlanta  |peach, cnn      |
+--------------------------+
|usa      |big, hard       |
+--------+-----------------+

注意:我在 MySQL 中檢查了它,但在 MariaDB 中沒有。

用戶表的計數列可以使用帶有 INNER JOIN 的 UPDATE 語句進行更新。 然后,您可以使用修改原始查詢的查詢以使用“GROUP BY”。

UPDATE users AS u
INNER JOIN
(
  -- your original query modified
  SELECT u.ID AS ID, count(u.ID) AS count
  FROM users u
  INNER JOIN address_effect a 
      ON FIND_IN_SET(a.address, REPLACE(u.address, ', ', ','))
  GROUP BY u.ID
) AS c ON u.ID=c.ID
SET u.count=c.count;

使用返回匹配數的相關子查詢:

UPDATE user u
SET u.count = (
  SELECT COUNT(*)
  FROM address_effect a
  WHERE FIND_IN_SET(a.address, REPLACE(u.address, ', ', ','))
)

演示
結果:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM