2013-08-27 2 views
1

여러 테이블에서 주소 데이터를 빌드하고 UNION 쿼리를 사용하여 두 개의 반환 된 데이터 세트를 만들어내어 중복을 제거하려고합니다. 나는 내가 내 UPRN 무엇입니까 및 single_address_label 열을 반환한다는 점에서 꽤 잘 작동 mySQL에서 중첩 된 IF 사용 SELECT 문

$query = " 
    SELECT 
    l.UPRN, 
    (CONCAT(IF(o.ORGANISATION IS NULL, '', CONCAT(o.ORGANISATION, ' ')), 
     IF(l.SAO_TEXT IS NULL, '', CONCAT(l.SAO_TEXT, ' ')), 
     IF(l.SAO_START_NUMBER <> 0, SAO_START_NUMBER, ''), 
     IF(l.SAO_START_SUFFIX IS NULL, '', SAO_START_SUFFIX), 
     IF(l.SAO_END_NUMBER <> 0, CONCAT('-', SAO_END_NUMBER), ''), 
     IF(l.SAO_END_SUFFIX IS NULL, '', l.SAO_END_SUFFIX), 
     IF(l.PAO_TEXT IS NULL, '', CONCAT(' ', l.PAO_TEXT, ' ')), 
     IF(l.PAO_START_NUMBER <> 0, PAO_START_NUMBER, ''), 
     IF(l.PAO_START_SUFFIX IS NULL, '', PAO_START_SUFFIX), 
     IF(l.PAO_END_NUMBER <> 0, CONCAT('-', PAO_END_NUMBER), ''), 
     IF(l.PAO_END_SUFFIX IS NULL, '', l.PAO_END_SUFFIX), 
     IF(s.STREET_DESCRIPTION IS NULL, '', 
     CONCAT(' ', s.STREET_DESCRIPTION, ' ')), 
     IF(s.LOCALITY_NAME IS NULL, '', CONCAT(s.LOCALITY_NAME, ' ')), 
     IF(s.TOWN_NAME IS NULL, '', CONCAT(s.TOWN_NAME, ' ')), 
     IF(s.ADMINISTRATIVE_AREA IS NULL, '', 
     CONCAT(s.ADMINISTRATIVE_AREA, ' ')), 
     b.postcode_locator) 
    ) AS single_address_label 
    FROM addbaseprem.abp_lpi l 
    INNER JOIN addbaseprem.abp_blpu b 
     ON b.UPRN = l.UPRN 
    INNER JOIN addbaseprem.abp_street_descriptor s 
     ON s.USRN = l.USRN 
    LEFT JOIN addbaseprem.abp_organisation o 
     ON o.UPRN = l.UPRN 
    WHERE l.LOGICAL_STATUS = 1 
"; 

PHP

에서 다음 SQL 문을 건물입니다. 그것이 내가

IF(s.ADMINISTRATIVE_AREA IS NULL,'',IF((s.ADMINISTRATIVE_AREA == s.TOWN_NAME),'',CONCAT(s.ADMINISTRATIVE_AREA,' ')), 
뭔가를하고 싶은 TOWN_NAME 값의 예와 같은 경우 내가 ADMINISTRATIVE_AREA 값을 CONCAT하는 나는 일이하고 싶은 무엇

IF(s.ADMINISTRATIVE_AREA IS NULL,'',CONCAT(s.ADMINISTRATIVE_AREA,' ')), 

하지만 다음과 같은 부분에 문제가되지 않는 데

나는 OR의 몇 가지 변형을 시도했지만! = 등등 그러나 아무 소용이 없다 - 나는 코드를 올바르게 가져 오지 못하고 구문 오류가 계속 발생하는 것처럼 보일 수있다. 나는 단지 불가능한 일을하려고하는지 아니면 그냥 모범생 실수를 저 지르려고하는지 알지 못합니다. 이것을 얻기까지 꽤 시간이 걸렸습니다 ...

감사의 말을 전하는 모든 도움이나 조언을드립니다.

답변

1

시도 :

IF(s.ADMINISTRATIVE_AREA IS NULL OR s.ADMINISTRATIVE_AREA = s.TOWN_NAME,'',CONCAT(s.ADMINISTRATIVE_AREA,' ')) 

또한 IFNULL를 사용하여 조각의 대부분을 단순화 할 수 있습니다

IF(column IS NULL, '', column) 
+0

감사 :

IFNULL(column, '') 

은 동일합니다. 잘 작동합니다. 어젯밤에 내가 어떻게 못 봤는지 이해할 수 없어. – user1576265