这是SQL,“ aal_county_zip”具有2个邮政编码的条目,而“ us_zip”具有15个邮政编码。要求是从“ aal_county_zip”中获取15行,只有2行包含数据。它像普通联接一样工作。我该如何更改SQL /表结构以使其正常工作。我还想添加下面注释的条件。
SELECT DISTINCT a.zcta5ce10 AS zipcode,
c.report_year,
c.aal
FROM aal_county_zip c
RIGHT OUTER JOIN us_zip a
ON ( c.zip = a.zcta5ce10 )
WHERE Lower(c.name) = Lower('alachua')
--and c.report_year=2009
ORDER BY c.report_year DESC
在WHERE Lower(c.name) = Lower('alachua')
您的查询接通外连接到内部联接,因为它可以防止c.name
被NULL
。
考虑改用左联接,因为它们通常更自然地编写。并且无论如何,都应将该条件应用于join子句而不是应用于where子句,以避免将其转换为内部联接。
借用和修改@dasblinkenlight的查询:
SELECT DISTINCT
a.zcta5ce10 AS zipcode
, c.report_year
, c.aal
FROM us_zip a
LEFT OUTER JOIN aal_county_zip c
ON c.zip = a.zcta5ce10
AND c.report_year=2009
AND LOWER(c.name) = LOWER('alachua')
ORDER BY c.report_year DESC
那应该可以解决“仅返回两行”的问题。也就是说,查询可能缺少上的一些其他条件(和排序条件)us_zip
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句