2013-03-24 89 views
-1

下面是我的MySQL查詢如何包含另一個表中JOIN

SELECT 
    opensalesorder.so_number, 
    items.VendorName, 
    opensalesorder.item_number, 
    items_custom_fields.FieldValue AS `Stock Item`, 
    vendor_custom_fields.FieldValue AS `Paid Freight Allowance`, 
    items.QuantityOnHand, 
    items.ReorderPoint, 
    items.MaxQty, 
    SUM(opensalesorder.quantity_on_order), 
    items.PurchaseCost, 
    items.VendorName, 
    items.VendorName, 
    items.PurchaseCost, 
    opensalesorder.status, 
    items.ItemType 
FROM 
    vendor, 
    `opensalesorder` 
inner join items 
    on opensalesorder.item_number = items.ItemName 
JOIN items_custom_fields 
    ON items_custom_fields.ItemName = items.ItemName 
JOIN vendor_custom_fields 
    ON vendor_custom_fields.VName = vendor.VName 
WHERE opensalesorder.item_number = items.ItemName 
     and items_custom_fields.FieldName ='Stock Item' 
     and vendor_custom_fields.FieldName ='Paid Freight Allowance' 
     and opensalesorder.status NOT LIKE 'on po' 
     AND opensalesorder.so_number NOT IN ('2','3') 
     AND items.VendorName NOT IN ('Access') 
     AND opensalesorder.item_number NOT IN ('018-0001') 
     group by opensalesorder.item_number 
LIMIT 100 

上執行此查詢我收到錯誤,如

#1054 - Unknown column 'vendor.VName' in 'on clause' 

但我已經包含在FROM子句中的供應商表。 在JOIN中包含表格的正確方法是什麼? 那麼這個查詢有什麼錯誤?

編輯:

SHOW CREATE TABLE FOR opensalesorder

CREATE TABLE `opensalesorder` (
    `so_number` decimal(10,0) NOT NULL, 
    `item_number` varchar(20) NOT NULL, 
    `quantity_on_order` int(11) NOT NULL, 
    `quantity_to_order` int(11) NOT NULL, 
    `status` varchar(20) NOT NULL, 
    `editsequence` text NOT NULL, 
    `TxnLineID` text NOT NULL, 
    `TxnID` text NOT NULL, 
    `dateCreated` date NOT NULL, 
    `shipDate` date NOT NULL, 
    `customer` text NOT NULL, 
    `itemclass` text NOT NULL, 
    UNIQUE KEY `unique_mapping` (`so_number`,`item_number`), 
    KEY `so_number` (`so_number`), 
    KEY `item_number` (`item_number`), 
    KEY `status` (`status`) 
) 

SHOW CREATE TABLE的項目

CREATE TABLE `items` (
    `ItemName` varchar(30) NOT NULL, 
    `VendorName` varchar(40) DEFAULT NULL, 
    `QuantityOnHand` int(11) DEFAULT NULL, 
    `QuantityOnSalesOrder` int(11) DEFAULT NULL, 
    `ReorderPoint` int(11) DEFAULT NULL, 
    `PurchaseCost` double DEFAULT NULL, 
    `AverageCost` double DEFAULT NULL, 
    `SalesPrice` double DEFAULT NULL, 
    `PurchaseDesc` varchar(200) DEFAULT NULL, 
    `SalesDesc` varchar(200) DEFAULT NULL, 
    `ItemType` varchar(30) DEFAULT NULL, 
    `FreeCode` int(11) DEFAULT NULL, 
    `SubGroup` varchar(10) DEFAULT NULL, 
    `DateNewItem` date DEFAULT NULL, 
    `Notes` text, 
    `MaxQty` int(11) DEFAULT NULL, 
    `QuantityOnPO` int(11) DEFAULT NULL, 
    PRIMARY KEY (`ItemName`), 
    KEY `ItemName` (`ItemName`), 
    KEY `VendorName` (`VendorName`) 
) 

SHOW CREATE TABLE FOR vendor_custom_fields

CREATE TABLE `vendor_custom_fields` (
    `VName` text NOT NULL, 
    `FieldName` text NOT NULL, 
    `FieldValue` text NOT NULL, 
    `FieldType` text NOT NULL, 
    PRIMARY KEY (`VName`(120),`FieldName`(120)), 
    FULLTEXT KEY `VName_index` (`VName`) 
) 

SHOW CREATE TABLE FOR廠商

CREATE TABLE `vendor` (
    `VName` varchar(60) NOT NULL, 
    `CompanyName` varchar(100) NOT NULL, 
    `Address1` varchar(120) NOT NULL, 
    `Address2` varchar(120) NOT NULL, 
    `City` varchar(40) NOT NULL, 
    `State` varchar(50) NOT NULL, 
    `PostalCode` varchar(13) NOT NULL, 
    `Phone` varchar(13) NOT NULL, 
    `Fax` varchar(13) NOT NULL, 
    `AlternatePhone` varchar(13) NOT NULL, 
    `AlternateContact` varchar(30) NOT NULL, 
    `Email` varchar(40) NOT NULL, 
    `AccountNumber` varchar(30) NOT NULL, 
    `Balance` double NOT NULL, 
    `RepEmail` varchar(40) NOT NULL, 
    `FreightAllowance` double DEFAULT NULL, 
    `MinimumPOLimit` double DEFAULT NULL, 
    `Notes` text NOT NULL, 
    PRIMARY KEY (`VName`) 
) 
+0

那麼,你的供應商表中是否有'VName'列?在附註中,您已將'items.VendorName'包含在結果列表中兩次。 – Perception 2013-03-24 08:03:25

+0

是......供應商中有VName – Pratik 2013-03-24 08:04:54

+0

@Perception三。 :) – hjpotter92 2013-03-24 08:05:58

回答

0

我認爲這個問題是混合的暗示與(unimplied) '表示' 加入加盟。當我把'vendor'作爲一個普通的連接時,查詢就沒有問題。

(我不得不引用註釋爲「items_custom_fields」因爲你不包括表定義)

這裏有一個fiddle

+0

items_custom_fields具有相同的創建表結構,只需更改名稱與ItemName – Pratik 2013-03-24 11:43:14

+0

無論哪種方式 - 這不是問題在這裏。更改查詢的結構(只是略微),它的工作原理。 – ethrbunny 2013-03-24 11:46:55

相關問題