[英]using nested IF in mySQL SELECT statement
我正在尝试从多个不同的表中构建一些地址数据,并使用UNION查询删除两个重复的数据集。 我正在用PHP构建以下SQL语句
$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,' ')),
如果与TOWN_NAME值相同,我想不要CONCAT ADMINISTRATIVE_AREA值,例如,我想要
IF(s.ADMINISTRATIVE_AREA IS NULL,'',IF((s.ADMINISTRATIVE_AREA == s.TOWN_NAME),'',CONCAT(s.ADMINISTRATIVE_AREA,' ')),
我尝试了OR!=的一些变体,等等,但无济于事-我似乎无法正确获取代码并不断收到语法错误。 我不知道我是否正在尝试做一些不可能或只是犯了一个小学生错误的事情。 花了很长时间才能走到这一步...
感谢收到所有帮助或建议。
尝试:
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.