두 개의 제품 테이블이 있습니다. 표 A는 "기본"표입니다 (데이터 피드는 매주 자동으로 업데이트됩니다). 표 B는 표 A의 값을 수동으로 겹쳐 쓰는 데 사용되며 표와 동일한 열과 몇 가지가 더 있습니다. 두 테이블은 항상 동일한 UniqueID 열을가집니다.선택시 다른 테이블이있는 MySQL 테이블 덮어 쓰기/결합
B의 값이 null이 아니라면 B의 값을 덮어 쓰고 A의 모든 값과 B의 모든 값을 가져 오는 select 문이 필요합니다. B의 값이 null이거나 = 0 또는 0.00과 같은 열 (정수로 설정된 열 2 개의 소수점이 있고 "0"으로 채워짐).
LEFT JOIN을 사용했지만 null 값과 "0"값에 문제가 있습니다.
저는 PHP에서 데이터를 사용하고 있으며, 단지 1 행만 가져와야 할 때 처리 할 수 있습니다. 나는 각각에 대해 쿼리하고, A를위한 assoc 배열을 추출하고, B 배열을 필터링 한 다음 추출한다. 하지만 그 과정은 20-200 행을 끌어 당기기 시작할 때 매우 까다로워집니다.
표 A는 약 400,000 개의 행을 가지며 B가 10,000-20,000을 넘는 것을 볼 수 없습니다.
도움 주셔서 감사합니다.
업데이트 : 다음은 내가 작업해야하는 코드입니다.
SELECT a.UniqueId, IF(b.Color, b.Color, a.Color) as Color, IF(b.Price1 = 0, a.Price1, b.Price1) as Price1, b.SPrice1 FROM productdata a LEFT JOIN product_overrides b ON a.UniqueID = b.UniqueID WHERE a.UniqueID = $prod";
업데이트 2 : 그래서 간단한 낫다. IF()는 null과 0을 모두 처리합니다.
IF은 expr1 TRUE 인
경우 (expr1을, 만일 expr2, expr3를) (expr1을 <> 0 expr1을 <> NULL)는 다음 IF (가)를 expr2이 반환 그렇지 않으면 expr3을 리턴합니다. IF()는 사용 된 컨텍스트에 따라 숫자 또는 문자열 값을 반환합니다.
SELECT a.UniqueId, IF(b.Color, b.Color, a.Color) as Color, IF(b.Price1, b.Price1, a.Price1) as Price1, b.SPrice1 FROM productdata a LEFT JOIN product_overrides b ON a.UniqueID = b.UniqueID WHERE a.UniqueID = $prod";
SELECT가 UniqueID, COALESCE (b.Price1, a.Price1) Price1로, productdata에서 왼쪽이 ON product_overrides의 B 가입 .UniqueID = b.UniqueID WHERE UniqueID = "5676544"; 은 나를 1064 구문으로 만듭니다. 내가 COALESCE에 대해 * 교환하면 작동합니다. – EricImprint
@EricImprint - 'Price1' 다음에 쉼표가 추가 된 것처럼 보입니다. –