2013-03-24 91 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

相关问题