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で2つのテーブルを内部結合できますが、MemberDetail.postcodeがPostcodeData.postcodeに存在しない場合に問題が発生します。そのような場合でも、これらのメンバーを選択したいのですが、City、State、Areacodeの結果は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

OUTER JOIN-の代わりに使用しINNER JOINます。これにより、結合テーブルに一致するレコードがない場合でもレコードが返されます。

ただし、外部結合は、FROM句で指定されたテーブルまたはビューの少なくとも1つからすべての行を返します。ただし、これらの行が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 に答える