2013-07-06 4 views
0

내 테이블SQL 업데이트 표는 여기

  • bia_panels (id, sign_id, value, project_id)

  • bia_clients (id, name)

  • bia_projects (id, name, client_id, city_id)

    의 관련 열입니다 조인
  • bia_cities (id, name)

나는이 (가) bia_panels.value = bia_clients.namepanels.project_id =000하고 값이 나는 여러 사용해야 물론 비어 있지 bia_projects.id는 조인이 얻을 bia_panels.project_id

-- UPDATE 
SELECT * FROM 
`bia_panels` AS t1 
    JOIN bia_clients AS t2 
     ON t1.value = t2.name 
    JOIN bia_projects AS t3 
     ON t2.id = t3.client_id 


-- SET t1.project_id = t3.id 

-- WHERE t1.value<>'' AND t1.project_id = '000' 
WHERE t1.value <>'' 
를 업데이트하려고 시도하고있다

문제는 이것이 올바른 결과를 제공하지 않는다는 것입니다. (프로젝트 ID가 조인의 어딘가에서 올바르지 않아 여러 결과가 반환되어 깨집니다.

는 내가 value=client.name하지만 그들 모두가 동일한 프로젝트 ID를 어디에 여러 패널이있을 수 있습니다 내가 올바른 선택 부분을 얻을 수 있어요 일단 내가 예를 들어 업데이 트

를 사용할 수 있다는 것을 알고

+1

*** SQL ***입니다 단지 * 구조적 쿼리 언어 * - 언어 많은 데이터베이스 시스템에서 사용되지만 데이터베이스 제품에서는 사용되지 않습니다 ... 많은 것들이 공급 업체별입니다. 따라서 ** 사용중인 ** 데이터베이스 시스템 ** (및 어떤 버전)을 알고 있어야합니다 (그에 따라 태그를 업데이트하십시오). ... –

답변

0

및 bia_panels.ID = bia_panels.project_id

조인 조건이 당신의 선택 쿼리에 누락이

JOIN bia_projects ON bia_clients.id = bia_projects.client_id and bia_panels.ID = bia_panels.project_id 
처럼 추가해야

다음 쿼리는 오른쪽 출력을 제공한다

SELECT sign_id, value, left(sign_id, 3) AS city_ID , 
bia_clients.id AS 'client id', bia_projects.id AS proj_id , bia_cities.id 
FROM bia_panels 
JOIN bia_clients ON bia_panels.value = bia_clients.name 
JOIN bia_projects ON bia_clients.id = bia_projects.client_id and bia_panels.ID = bia_panels.project_id 
JOIN bia_cities ON bia_projects.city_id = bia_cities.id WHERE bia_panels.value<>'' AND bia_panels.project_id = '000' ORDER BY value 
0

나는 UPDATE 쿼리에 쿼리 조금 재구성 것 :

UPDATE bia_panels p, bia_clients c, bia_projects t 
    SET p.project_id=t.id 
    WHERE p.value=c.name 
    AND t.client_id=c.id 
    AND p.project_id=''