php
  • mysql
  • sql-update
  • 2012-09-10 2 views 0 likes 
    0

    테이블 2 개가있는 경우를 상상해보십시오. & 제조업체.외래 키 기반의 튜플 업데이트 키

    차량 (ID [PK], 제조업체 _ID [FK], 이름, 가격, 할인)

    가 이

    제조사 (ID [PK], 이름)

    나는 모든 차량을 업데이트하려면이 제조업체 이름이 'BMW'. 나는 제조업체 ID가 일단

    내 어설픈 방법 ...

    "SELECT Id FROM Manufacturers WHERE Name = 'BMW'"; 
    

    나는 업데이트 쿼리를 실행할 수 있습니다. 어떻게 든 업데이트 문 내에서 'BMW'를 참조, 멀리 선택 쿼리를 수행 할 수있다

    UPDATE Vehicles SET Discount='0.1' WHERE Manufacturer_Id='$manuId' 
    

    는 내가 찾던, 더 우아한 솔루션입니다.

    나는 모든 경우에 ... 같은 것을 할 수 원하는 :

    UPDATE Vehicles SET Discount='0.1' WHERE Vehicles.Manufacturer_Id = Manufacturer.Id AND Manufacturer.Name = 'BMW' 
    
    이 쿼리 같은
    +0

    어쩌면 '어디에서'를 사용하여 '업데이트'할 수 있습니다. http://stackoverflow.com/questions/2474879/mysql-update-where-in-for-each-listed-value-separately – binnyb

    +0

    10 % 할인 beemers? 어디서 가입합니까? 아니면 1 페니 할인입니까? 목록에서 내 이름을 제거하려면 어떻게해야합니까? –

    +0

    LOL !!! 음, 그것은 단지 예일뿐입니다 ... – Gravy

    답변

    1
    UPDATE Vehicles SET Discount='0.1' WHERE Manufacturer_Id IN 
    (SELECT id FROM Manufacturers WHERE Name = 'BMW'); 
    
    +0

    고맙습니다. 매우 도움이 !!! – Gravy

    2

    뭔가 작동합니다 :

    UPDATE Vehicles SET Discount='0.1' WHERE Manufacturer_Id IN (SELECT Id FROM Manufacturers WHERE Name = 'BMW'") 
    
    +0

    미안 하네, 매트 S가 2 분 전에 도착 했어. 도움을 주셔서 감사합니다 – Gravy

    0

    쉬운 대답은 서브 선택이지만, 일반적으로 하위에 -select는 성능에 좋지 않습니다. 이 경우 OK라고 가정합니다. Manufacturers 키 쌍 (id-name)을 자주 사용하고 select를 채우고 이름에서 ID를 가져 오는 등 Identity Map 패턴 (OOP의 일부 유사성을 가정)을 사용하고 memcache 데이터베이스에 대한 여행을 더 줄이기위한 캐싱 전략입니다.

    +0

    이것은 과도한 엔지니어링이며 적절한 인덱스가있는 평균 크기의 데이터베이스에 대해서는 좋은 해결책이 아닙니다. –

    +0

    크기에 대한 언급을 보지 못했습니다. OP가 불필요한 '룩업 (look up)'을 방지하려고 시도하는 경우 제 대답도 유효하다고 생각합니다. 개인적으로 하위 선택을 우아함과 동일시하지 않습니다. – ficuscr

    관련 문제