2013-02-22 127 views
3

我想更有效地实现这一目标而优雅从select语句在SQL

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 ON邮编两个表,但我有问题时,MemberDetail.postcode确实拉动多个值不存在于PostcodeData.postcode中。在这种情况下,我仍然希望选择这些成员,但对于城市,州和Areacode的结果为NULL。这在当前查询中已经实现,但效率很低。任何想法,将不胜感激。干杯!

回答

4

只需使用一个LEFT JOIN

SELECT 
    MD.*, 
    P.City, 
    P.State, 
    P.Areacode 
FROM MemberDetails AS MD 
    LEFT JOIN PostcodeData P ON MD.Postcode = P.Postcode 
+0

干杯@sgegges,左加入是我之后 – Gregology 2013-02-22 20:08:55

0

使用OUTER JOIN而不是INNER JOIN - 即使连接表上没有匹配的记录,它也会返回记录。

但是,外部连接返回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