codememo

MySQL 선택에서 업데이트

tipmemo 2023. 9. 10. 12:18
반응형

MySQL 선택에서 업데이트

거래표에 e.auto="true"가 있는 다음 날짜 "%2017-08-07%"부터 "%2017-08-07%" 사이의 금액을 업데이트하려고 합니다.하지만, mysql이 돌아오고 있습니다.

1064 - SQL 구문에 오류가 있습니다. MariaDB 서버 버전에 해당하는 매뉴얼에서 1행에서 'FROM user as u JOIN e_tractas e ON e.id = u.ewallet JOIN transacti'에 가까운 구문을 사용하는 올바른 구문을 확인하십시오.

update t set t.amount = (
                          select t.amount 
                          FROM user as u 
                          JOIN e_wallet as e ON e.id = u.ewallet 
                          JOIN transaction as t on t.user = u.id 
                          where e.auto="true" 
                                and t.create_date like "%2017-08-07%"
                        ) 
FROM user as u 
JOIN e_wallet as e ON e.id = u.ewallet 
JOIN transaction as t on t.user = u.id 
where e.auto="true" 
      and t.create_date BETWEEN "%2017-08-01%" and "%2017-08-07%"

만약 당신이 서브쿼리를 무시한다면, 당신의UPDATE쿼리 모양:

UPDATE t
SET t.amount = ...
FROM user AS u ...
JOIN e_wallet AS e ...

당신은 가질 수 없습니다.FROMa의 조항UPDATE쿼리가 구문 오류의 원인입니다.구문은 다음과 같습니다.

UPDATE tablename AS t1
JOIN tablename2 AS t2 ON ...
JOIN tablename3 AS t3 ON ...
SET ...
WHERE ...

그렇다면 다음과 같습니다.

UPDATE transaction AS t
JOIN user AS u ON u.id = t.user
JOIN e_wallet AS e ON e.id = u.ewallet
SET t.amount = (
  select t.amount 
  FROM user as u 
  JOIN e_wallet as e ON e.id = u.ewallet 
  JOIN transaction as t on t.user = u.id 
  where e.auto="true" 
        and t.create_date like "%2017-08-07%"
) 
WHERE e.auto = "true"
AND t.create_date BETWEEN "2017-08-01" and "2017-08-07"

이렇게 하면 구문 오류가 해결되겠지만, 원하는 대로 될지는 잘 모르겠습니다.하위 쿼리는 기본 쿼리와 상관 관계가 없으므로 기준을 충족하는 모든 트랜잭션의 양을 반환합니다.그러나 하위 쿼리를 표현식으로 사용할 때는 최대 한 행을 반환해야 합니다.당신은 아마도 단지 당신과 함께 하기를 원할 것입니다.transaction다시 한 번 테이블에 앉습니다.

UPDATE transaction AS t
JOIN user AS u ON u.id = t.user
JOIN e_wallet AS e ON e.id = u.ewallet
JOIN transaction AS t1 ON t1.user = t.user
SET t.amount = t1.amount
WHERE e.auto = "true"
AND t.create_date BETWEEN "2017-08-01" and "2017-08-07"
AND t1.create_date LIKE '%2017-08-07%'

언급URL : https://stackoverflow.com/questions/46234053/update-from-select-mysql

반응형