programing

이전 쿼리 결과에 따라 테이블을 업데이트하는 중

goodcopy 2022. 12. 7. 00:10
반응형

이전 쿼리 결과에 따라 테이블을 업데이트하는 중

이전 쿼리 결과를 기반으로 표를 업데이트하려면 어떻게 해야 합니까?

원래 쿼리(GMB 덕분에 커짐)는 주소(사용자 테이블)에서 일치하는 주소(address_effect 테이블)를 찾을 수 있습니다.

이 쿼리 결과에서 address_effect 테이블에서 주소 카운트를 찾아 테이블 "users"의 새 열에 추가합니다.예를 들어, john doe는 주소 열에 아이다호 및 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 테이블

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

일치하는 수를 반환하는 관련 하위 쿼리를 사용합니다.

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

주의: MySQL에서는 확인했지만 MariaDB에서는 확인하지 않았습니다.

사용자 테이블의 카운트 열은 INSER 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;

언급URL : https://stackoverflow.com/questions/62964855/updating-table-based-on-the-results-of-previous-query

반응형