2013-01-05 5 views
0

변수 테이블에서 변수 행을 업데이트하려고합니다.MYSQL 업데이트 쿼리 다중 조인 선택 오류

// 편집 : 이것은 내 쿼리입니다 이중 제거 ...

UPDATE `ec`.`category_id` AS `category_id`,`e`.`title` AS `title`, 
    `r`.`first_name` AS `first_name`, 
    `r`.`last_name` AS `last_name`,`r`.`email` AS `email`, 
    `r`.`comment` AS `comment`,`r`.`amount` AS `amount`, 
    `r`.`published` AS `published`,`r`.`transaction_id` AS `transaction_id`, 
    `r`.`register_date` AS `register_date`, 
max((case `f`.`id` when 1 then `v`.`field_value` else '' end)) AS `pand`, 
max((case `f`.`id` when 52 then `v`.`field_value` else '' end)) AS `achternaam`, 
max((case `f`.`id` when 53 then `v`.`field_value` else '' end)) AS `voornaam`, 
max((case `f`.`id` when 20 then `v`.`field_value` else '' end)) AS `gebdat`, 
max((case `f`.`id` when 32 then `v`.`field_value` else '' end)) AS `geslacht`, 
max((case `f`.`id` when 31 then `v`.`field_value` else '' end)) AS `kleinkind`, 
max((case `f`.`id` when 21 then `v`.`field_value` else '' end)) AS `straat`, 
max((case `f`.`id` when 54 then `v`.`field_value` else '' end)) AS `postcode`, 
max((case `f`.`id` when 55 then `v`.`field_value` else '' end)) AS `plaats`, 
max((case `f`.`id` when 26 then `v`.`field_value` else '' end)) AS `telthuis`, 
max((case `f`.`id` when 27 then `v`.`field_value` else '' end)) AS `telmir`, 
max((case `f`.`id` when 28 then `v`.`field_value` else '' end)) AS `gsmdeelnemer`, 
max((case `f`.`id` when 29 then `v`.`field_value` else '' end)) AS `gsmpapa`, 
max((case `f`.`id` when 56 then `v`.`field_value` else '' end)) AS `gsmmama`, 
max((case `f`.`id` when 30 then `v`.`field_value` else '' end)) AS `graad`, 
max((case `f`.`id` when 88 then `v`.`field_value` else '' end)) AS `bestelling`, 
max((case `f`.`id` when 34 then `v`.`field_value` else '' end)) AS `eigendom`, 
max((case `f`.`id` when 57 then `v`.`field_value` else '' end)) AS `zodiac`, 
max((case `f`.`id` when 42 then `v`.`field_value` else '' end)) AS `tshirt`, 
max((case `f`.`id` when 39 then `v`.`field_value` else '' end)) AS `helpdag`, 
max((case `f`.`id` when 40 then `v`.`field_value` else '' end)) AS `helpinfo`, 
max((case `f`.`id` when 36 then `v`.`field_value` else '' end)) AS `vervoerjanee`, 
max((case `f`.`id` when 37 then `v`.`field_value` else '' end)) AS `vervoerinfo` 
from ((((`dat_eb_field_values` `v` join `dat_eb_registrants` `r` on((`v`.`registrant_id` = `r`.`id`))) 
join `dat_eb_fields` `f` on((`v`.`field_id` = `f`.`id`))) 
join `dat_eb_events` `e` on((`r`.`event_id` = `e`.`id`))) 
join `dat_eb_event_categories` `ec` on((`ec`.`event_id` = `e`.`id`))) 
where ((`ec`.`category_id` = 4) and (`e`.`published` = 1)) 
SET $rowname=$newvalue WHERE transaction_id=$transid 

는 일반적으로이 쿼리는 대신 UPDATE의 첫 번째 인수로 SELECT 사용합니다. 마지막 줄도 나에게 추가되었습니다. $ rowname, $ NEWVALUE 및 $ TRANSID 모든 정의하고 나에게 다음과 같은 오류 geives : 사전에

Not unique table/alias: 'first_name'. 

감사합니다, 로랑

답변

0

UPDATE 절에 대한 구문 당신은 아무 것도 선택하지 않습니다 UPDATE 절으로 선택할 수있는 필드를 제공하지 않습니다이

UPDATE table JOIN table1 ON table.field = table1.field SET table.field2 = 'value' WHERE table.field3 = 'value2' 

같은 것입니다. 따라서 SELECT 절에서 필드를 제거하고 SET 뒤에 WHERE pat을 추가해야합니다.

UPDATE 
((((`dat_eb_field_values` `v` join `dat_eb_registrants` `r` on((`v`.`registrant_id` = `r`.`id`))) 
join `dat_eb_fields` `f` on((`v`.`field_id` = `f`.`id`))) 
join `dat_eb_events` `e` on((`r`.`event_id` = `e`.`id`))) 
join `dat_eb_event_categories` `ec` on((`ec`.`event_id` = `e`.`id`))) 

SET $rowname=$newvalue 

WHERE ((`ec`.`category_id` = 4) and (`e`.`published` = 1)) AND transaction_id=$transid 
+0

일반적으로이 쿼리는 UPDATE 대신 첫 번째 인수로 SELECT를 사용합니다. 게시물 –

+0

일반적으로 SELECT를 사용합니다. 그리고이 SELECT 절에서 UPDATE를 만들고 싶습니다. –

+0

이것을 실행하면 '필드 목록'의 열 ($ newvalue의 내용)을 알 수 없습니까? 어떤 생각입니까? – Laurent

0

문제는 모호한 별칭이 여기

`r`.`first_name`,`r`.`first_name` AS `first_name`, 

입니다 .

+0

이것은 수행하려고하는 모든 것을보고있는 사소한 일입니다. 이 경우'first_name'은 별명이 아니며 필드 일뿐입니다. 이'first_name'을 제거하면, 예를 들어'first_name' 테이블이 없다는 것과 같은 다른 문제가 발생할 것입니다. –

+0

왜 테이블의 별칭 만 생각하십니까? –

+0

이 경우 필드 별칭이 아니라 테이블 별칭으로 인식됩니다. '고유 테이블/별칭 : 'first_name'. 중복 된 별칭을 제거하면 다른 문제가 발생할 수 있습니다. –