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

我显然可以在 Postcode 上 INNER JOIN 两个表,但是当 PostcodeData.postcode 中不存在 MemberDetail.postcode 时我遇到了问题。在这种情况下,我仍然希望选择那些成员,但城市、州和区号的结果为 NULL。这是在当前查询中实现的,但效率非常低。任何想法,将不胜感激。干杯!

4

3 回答 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
于 2013-02-22T19:54:05.873 回答
0

使用 anOUTER JOIN而不是 an INNER JOIN- 这将返回记录,即使连接表上没有匹配的记录。

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

于 2013-02-22T19:53:47.073 回答
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
于 2013-02-22T19:55:32.087 回答