从SQL的选择语句中提取多个值

3
我正在尝试更高效、优雅地实现这个目标。
SELECT
  MD.*,
  (SELECT City FROM PostcodeData WHERE MD.Postcode = Postcode) [City],
  (SELECT State FROM PostcodeData WHERE MD.Postcode = Postcode) [State],
  (SELECT Areacode FROM PostcodeData WHERE MD.Postcode = Postcode) [Areacode]
FROM MemberDetails AS MD

我可以很明显地使用INNER JOIN在Postcode上连接这两个表,但是当MemberDetail.postcode不存在于PostcodeData.postcode中时,我会遇到问题。在这种情况下,我仍然希望选择这些成员,但是City、State和Areacode的结果为NULL。目前的查询实现了这一点,但效率非常低。如果有任何想法,将不胜感激。谢谢!

3个回答

4
只需使用 LEFT JOIN:
SELECT
  MD.*,
  P.City,
  P.State,
  P.Areacode
FROM MemberDetails AS MD
   LEFT JOIN PostcodeData  P ON MD.Postcode = P.Postcode

谢谢@sgegges,LEFT JOIN正是我想要的。 - Gregology

0

使用外连接代替内连接 - 这样可以返回记录,即使联接表中没有匹配的记录。

然而,外连接将返回至少在FROM子句中提到的一个表或视图中的所有行,只要这些行符合任何WHERE或HAVING搜索条件。


0

肯定是使用外连接吧?类似这样:

SELECT MD.*, 
IsNull(pc.City,"No city") AS City,
IsNull(pc.State,"No state") AS State,
IsNull(pc.AreaCode,"No area code") AS AreaCode
FROM
MemberDetails AS MD
LEFT OUTER JOIN PostCodeData AS pc ON md.PostCode=pc.PostCode

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接