2012-01-25 2 views
0

SELECT의 결과를 사용하여 후속 UPDATE에서 변경된 필드를 결정하는 방법은 무엇입니까? (복합 명령문 (compound statement)에서 UPDATE 뒤에 SELECT를 효과적으로 묶는 것).다중 테이블 구문으로 업데이트

SELECT id_of_record_in_table_B 
FROM table_A 
WHERE table_A.id_of_record_in_table_B = 36; 

UPDATE table_B SET string_field = 'UPPERCASE' 
WHERE BINARY table_B.string_field LIKE '%lowercase' 
AND table_B.id = id_of_record_in_table_B --from the SELECT above) 

사례 구분 일치 문제에 정말 관련이없는하지만 그것이 내가해야 할 일을 실제로 때문에 그것을 포함했다 : 여기

내가 SQL에서 할 노력하고있어 것입니다. 해결하려고하는 문제는 SELECT에서 반환 된 값을 UPDATE에 "전달"하는 방법입니다.

+0

첫 번째 쿼리는 항상 '36'(1, 2, 3, ..., 1000 또는 0 행이지만 모두 36을 반환) 만 반환합니까? –

답변

1

당신이 하위 쿼리를 방지 update with multi table 구문 따라서 호출 할 수있는 등

UPDATE table_B SET string_field = 'UPPERCASE' 
WHERE BINARY table_B.string_field LIKE '%lowercase' 
AND table_b.id = (SELECT id_of_record_in_table_B 
        FROM table_A 
        WHERE table_A.id_of_record_in_table_B = 36) 
+0

+1 감사합니다. 나는 특히 select의 결과를 사용하고 평등 비교를하는이 대답을 좋아한다. 나는 그것이 어떻게 작동하는지보고 나가서 다시보고 할 것이다. – therobyouknow

+0

당신은 환영합니다. 희망이 당신의 문제를 해결합니다. 내가 업데이트 table_B의 SET = '대문자'BINARY table_B.string_field LIKE '% 소문자' 과는 IN을 table_b.id 은 (WHERE table_A.id_of_record_in_table_B = 36 table_A 로부터 id_of_record_in_table_B 를 선택) string_field'IN에 =을 변경하는 경우 – Kypros

+1

이 작동 '=를 쓰면 영향을받지 않는 결과가 나온다. IN은 원하는 효과를냅니다. 당신이 충분히 가까웠 기 때문에 받아 들여지고 받아 들여졌습니다. 크레디트 : http://www.roseindia.net/sql/mysql-example/mysql-nested-select.shtml 및 http://www.daniweb.com/web-development/databases/mysql/threads/10744 '에서'. – therobyouknow

1

같은 쿼리에 있었다. 이 구문의 유일한 문제점은 order by 및 limit 절을 사용할 수 없다는 것입니다.

UPDATE table_B as tb,table_A as ta 
SET tb.string_field = 'UPPERCASE' 

WHERE BINARY tb.string_field LIKE '%lowercase' 
AND tb.id = id_of_record_in_table_B 
AND tA.id_of_record_in_table_B = 36 
+0

+1 감사합니다! 대체에 대해 알아 보는 것은 흥미 롭습니다. – therobyouknow

+0

나는 그것이 나를 위해 어떻게 작동하는지보고하고 다시보고 할 것이다. – therobyouknow

+0

내 솔루션으로 인해 문제가 해결 되었습니까? –

0

중첩 된 select 문을 사용할 수 있습니다.

UPDATE table_B SET string_field = 'UPPERCASE' 
WHERE BINARY table_B.string_field LIKE '%lowercase' 
AND table_B.id IN (SELECT id_of_record_in_table_B 
        FROM table_A 
        WHERE table_A.id_of_record_in_table_B = 36); 
+0

@Angelin Nadar의 대답과 이상하게 비슷합니다. – therobyouknow

+0

그와 같은 @ kypro의 것은 다중 테이블 구문입니다. –