[SQL] 같은 테이블의 하위 쿼리와 MySQL을 UPDATE
SQL같은 테이블의 하위 쿼리와 MySQL을 UPDATE
나는를 수집 데이터를 형성하는 복잡한 MySQL 데이터베이스 테이블과 일하고 있습니다. 나는 시험 아래라는 예를 들어 테이블의 레이아웃을 단순화 :
|FormID|FieldName| FieldValue |
| 1 | city | Houston |
| 1 | country | USA |
| 2 | city | New York |
| 2 | country |United States|
| 3 | property| Bellagio |
| 3 | price | 120 |
| 4 | city | New York |
| 4 |zip code | 12345 |
| 5 | city | Houston |
| 5 | country | US |
phpMyAdmin에 내가 필요를 통해 특별히 내가 필드 이름 "도시"와 같은 FormID이있는 필드 이름 "국가"와 fieldValue의 "휴스턴"와 "미국"모든 fieldValue의 항목을 업데이트 할 어떤 테이블에 글로벌 업데이트로 만들려면 .
내가 쉽게하거나 하위 쿼리를 사용하거나 내부를 사용하여 SELECT 문을 사용하여 이러한 항목을 표시 할 수 있습니다 가입 :
SELECT FieldValue
FROM test
WHERE FormID
IN (
SELECT FormID
FROM test
WHERE FieldName = "city"
AND FieldValue = "Houston"
)
AND FieldName = "country"
또는:
SELECT a.FieldValue
FROM test a
INNER JOIN test b ON a.FormID = b.FormID
WHERE a.FieldName = "country"
AND b.FieldName = "city"
AND b.FieldValue = "Houston"
그러나 나는 내가 하위 쿼리 또는 내부 조인 또는 노동 조합의 시나리오 중 하나에 동일한 테이블을 참조 할 수 있음을 나타냅니다 MySQL의 오류의 형태를 얻을 내 UPDATE 문을 작성하려고합니다. 난 뷰를 생성하지 않고 업데이트 문이 참조하려고하지만 해결했다. 사람이 어떻게 나를 도와 어떤 생각을 가지고 있습니까?
해결법
-
==============================
1.당신은 당신이 선택하는 데 사용할 뭔가를 업데이트 할 수 없기 때문에, 임시 테이블을 사용해야합니다. 간단한 exemple :
당신은 당신이 선택하는 데 사용할 뭔가를 업데이트 할 수 없기 때문에, 임시 테이블을 사용해야합니다. 간단한 exemple :
이것은 작동하지 않습니다 :
UPDATE mytable p1 SET p1.type= 'OFFER' WHERE p1.parent IN (SELECT p2.id from mytable p2 WHERE p2.actu_id IS NOT NULL);
이 일을 할 것입니다 :
UPDATE mytable p1 SET p1.type= 'OFFER' WHERE p1.parent IN (SELECT p2.id from (SELECT * FROM mytable) p2 WHERE p2.actu_id IS NOT NULL);
"P2 (MYTABLE SELECT * FROM)에서의"업데이트의 영향을받지 않습니다 느릅 나무 테이블의 임시 복사본을 생성합니다
-
==============================
2.내가 제대로 이해 해요 경우, 트릭을해야 앨리어싱 :
내가 제대로 이해 해요 경우, 트릭을해야 앨리어싱 :
UPDATE test AS a JOIN test AS b ON a.id = b.id SET a.name = 'New Name' WHERE a.id = 104;
이 당신을 위해 작동하지 않는 이유는 무엇입니까? 업데이트 :이 테스트와 MySQL의 v5.6에 작동했다.
from https://stackoverflow.com/questions/10359534/mysql-update-with-subquery-of-same-table by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] INSERTED SQL 서버 OUTPUT에 오라클 상당 있습니다. *? (0) | 2020.06.15 |
---|---|
[SQL] 외래 키 캐스케이드 여러 경로 및주기의 문제는 무엇인가? (0) | 2020.06.15 |
[SQL] 오라클의 OR, 대 한 빠른? (0) | 2020.06.15 |
[SQL] int 데이터 형식 할 ... NVARCHAR 값을 변환 할 때 변환 실패 (0) | 2020.06.15 |
[SQL] 어떻게 LEFT OUTER은 JOIN 또는 RIGHT OUTER가 오라클에 가입 찾을 가입하기 (+) (0) | 2020.06.15 |