2013-06-26 189 views
0

我有兩個如此定義的表。用於存儲表的位置地址從表中選擇多個

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

其他表,其中提到兩個定位地址存儲在位置表中的每個條目是這個

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 

但我得到空行的結果。 任何人都可以指出我的錯誤嗎?

回答

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沒有包,或者要麼下降或拾取地點不在的位置表。如果後者然後嘗試使用左外部連接而不是內部連接

+2

您很可能需要爲名稱添加別名,例如'pick_name',否則您將有兩個名爲'name'的衝突字段。 –

+0

謝謝,我會自己添加別名,讓我等10分鐘接受你的回答 – Smith

+0

一般同意,但不知道他們用什麼語言來訪問MySQL(所以它可能是粗糙的,只支持列號)。 – Kickstart

2

它不應該是:

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

? 由於packages.client_id未被JOIN使用。

+0

謝謝,但這隻給我放置位置,我如何添加拾取位置? – Smith

+0

這應該與INNER JOIN無關(儘管從風格的角度來看,它確實使它更易於移出ON子句)。 – Kickstart

+0

感謝您的幫助,我欣賞 – Smith