2013-08-27 42 views
1

我想从一些不同的表中构建一些地址数据,并使用UNION查询来创建两个返回的数据集以删除重复项。我建立了下面的SQL语句在PHP在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 
"; 

这是相当不错的,我让我的UPRN和single_address_label列返回。我在与下面的一部分,尽管

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

一个问题,我想什么发生是不是CONCAT的ADMINISTRATIVE_AREA值,如果它是一样的TOWN_NAME值,例如,我想是这样

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

我已经尝试了一些OR!=的变体等,但无济于事 - 我似乎无法获得正确的代码,并且一直收到语法错误。我不知道我是否试图做一些不可能的事情,或者只是让一个男生犯错误。它需要相当长的时间才能得到这么远...

感谢所有帮助或建议。

回答

1

尝试:

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

您还可以使用IFNULL简化许多件:

IFNULL(column, '') 

等同于:

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

感谢。工作正常。无法理解昨晚我怎么看不到 – user1576265