0

このように定義された2つのテーブルがあります。テーブルの場所は、アドレスを格納するために使用されます

locations
---------
id
addr
city
zip
name

各エントリのロケーション テーブル内の 2 つのロケーション アドレス ストアを参照するもう 1 つのテーブルは次のとおりです。

packages
---------
id
client_id
pick_id  <-- this id is for the location address for pick
drop_id  <-- this id is for the location address for drop

帰りたい

location.name, location.addr, location.city, location.id for pick
location.name, location.addr, location.city, location.id for drop

指定された client_id の両方

私は現在、このSQLを持っています

Select
  packages.status,
  locations.name,
  locations.address,
  locations.zip,
  locations.city,
  locations.id
From
  packages Inner Join
  locations On packages.drop_id = locations.id And packages.client_id = 5

しかし、結果の空の行を取得しています。誰かが私の間違いを指摘できますか?

4

2 に答える 2

2

そうではありませんか:

...
ON packages.drop_id = locations.id
WHERE packages.client_id = 5

? packages.client_id は によって使用されないため、JOIN.

于 2013-06-26T12:54:08.517 に答える
2

ドロップとピックの場所ごとではなく、場所のテーブルにのみ反対しているようです。

両方を行うには、次のようなものを使用します:-

Select
  packages.status,
  PickLocation.name,
  PickLocation.address,
  PickLocation.zip,
  PickLocation.city,
  PickLocation.id,
  DropLocation.name,
  DropLocation.address,
  DropLocation.zip,
  DropLocation.city,
  DropLocation.id
From packages 
INNER JOIN locations AS PickLocation ON packages.pick_id = PickLocation.id
INNER JOIN locations AS DropLocation ON packages.drop_id = DropLocation.id
WHERE packages.client_id = 5

レコードが返されない場合は、クライアント ID 5 にパッケージがないか、ドロップまたはピックアップの場所が場所テーブルにないことが示唆されます。後者の場合は、INNER JOIN ではなく LEFT OUTER JOIN を使用してみてください。

于 2013-06-26T12:57:57.710 に答える