2013-01-06 186 views
0

我想在三張表中從mysql中獲取數據。我正在使用LEFT OUTER JOIN。這是我的查詢:Mysql數據庫查詢

SELECT cms_addresses.address1 as add1, 
    cms_addresses.email as ademail, 
    cms_addresses.city as adcity, 
    cms_addresses.clientid 
    cms_addresses.country as adcountry, 
    cms_addresses.province as adprovince, 
    cms_addresses.postal as adprovince, 
    cms_delivery_info.d_address1, 
    cms_delivery_info.d_city, 
    cms_delivery_info.d_country, 
    cms_delivery_info.d_province, 
    cms_delivery_info.d_postal, 
    cms_orders.id, 
    cms_orders.cdate, 
    cms_orders.message 
FROM cms_addresses 
LEFT OUTER JOIN cms_delivery_info 
    ON cms_addresses.clientid = cms_delivery_info.d_clientid 
LEFT OUTER JOIN cms_orders = cms_addresses.clientid = cms_orders.clientid 
WHERE cms_orders.id = 10 
    and cms_addresses.addresstypeid = 1 

問題是此查詢沒有運行,並給我那個錯誤。

不是唯一的表/別名: 'cms_addresses'

請幫我解決這個問題。感謝

回答

0

你不得不於第二左一個語法錯誤加盟,那裏有「=」表名後 嘗試這種::

SELECT 
cms_addresses.address1 as add1, 
cms_addresses.email as ademail, 
cms_addresses.city as adcity, 
cms_addresses.clientid, 
cms_addresses.country as adcountry, 
cms_addresses.province as adprovince, 
cms_addresses.postal as adprovince, 
cms_delivery_info.d_address1, 
cms_delivery_info.d_city, 
cms_delivery_info.d_country, 
cms_delivery_info.d_province, 
cms_delivery_info.d_postal, 
cms_orders.id, 
cms_orders.cdate, 
cms_orders.message 

FROM cms_addresses 

LEFT OUTER JOIN cms_delivery_info ON cms_addresses.clientid = cms_delivery_info.d_clientid 
LEFT OUTER JOIN cms_orders on cms_addresses.clientid = cms_orders.clientid 
WHERE cms_orders.id = 10 and cms_addresses.addresstypeid = 1 
0

cms_addresses.clientidcms_addresses.country AS adcountry之間的逗號,看看它的工作原理

SELECT cms_addresses.address1 AS add1, 
     cms_addresses.email AS ademail, 
     cms_addresses.city AS adcity, 
     cms_addresses.clientid,     // add comma here 
     cms_addresses.country AS adcountry, 
     cms_addresses.province AS adprovince, 
     cms_addresses.postal AS adprovince, 
     cms_delivery_info.d_address1, 
     cms_delivery_info.d_city, 
     cms_delivery_info.d_country, 
     cms_delivery_info.d_province, 
     cms_delivery_info.d_postal, 
     cms_orders.id, 
     cms_orders.cdate, 
     cms_orders.message 
FROM cms_addresses 
     LEFT JOIN cms_delivery_info 
       ON cms_addresses.clientid = cms_delivery_info.d_clientid 
     LEFT JOIN cms_orders 
       // use ON instead of = (equal sign) here 
       ON cms_addresses.clientid = cms_orders.clientid 
WHERE cms_orders.id = 10 AND cms_addresses.addresstypeid = 1 
0

在你SELECT你必須在某個時刻:

cms_addresses.clientid cms_addresses.country as adcountry, 

看起來像你錯過了,某處?

在你FROM您有:

LEFT OUTER JOIN cms_orders = cms_addresses.clientid = cms_orders.clientid 

再次我猜是一個錯字(第一=應該是一個ON)。

你所得到的消息表示正在重用表cms_addressesJOIN鏈,你不給它一個別名,這是強制性的歧義,但在你的情況,因爲你沒有cms_addresses不止是奇怪一次在FROM條款。

我試着重寫查詢給所有表的別名。還啓用完整日誌記錄並檢查真正到達Mysql的內容。