2014-10-05 40 views
0

我正在零售業務的項目,但有一些關於MySql數據的問題。 我們有2個供應商的表格。 一些產品他們使用相同的名稱不同的ID,但有些不是。一些產品唯一供應商A可以提供。從2供應商相同的產品,但不同的ID合併兩個MySQL表

 
Supplier A 
ProductID productName 
A1   Product 1 
A2   Product 2 


Supplier B 
ProductID productName 
B1   Product 1 
B2   Product 2.0 
B3   Product 3 

I want to create new table with our own Product id to use it as primary product data. 

Products table 
ProductID, A, B, productName 
P1   A1 B1 Product 1    
P2   A2 null Product 2 
P3   null B2 Product 2.0 
P4   null B3 Product 3 

謝謝。

+0

使用'joins' ..... – 2014-10-05 15:55:11

+0

你有什麼嘗試這麼遠嗎?這是一個相當直接的前瞻性SQL查詢... – ericpap 2014-10-05 15:55:22

回答

0

我會建議三張表。第一個是Products表,從提供產品的供應商中選擇一個名稱。第二個是Suppliers表,其中包含有關供應商的信息。第三個是ProductSuppliers,每個供應商和產品一行。樣本數據是:

create table Products (
    ProductId int not null auto_increment primary key, 
    ProductName 
); 

create table Suppliers (
    SupplierId int not null auto_increment primary key, 
    SupplierName 
); 

create table ProductSuppliers (
    ProductSuppliersId int not null auto_increment primary key, 
    ProductId int not null references Products(ProductId), 
    SupplierId int not null references Suppliers(SupplierId), 
    SupplierProductCode varchar(255) 
); 

然後可以填充這些從表中:

insert into Products(ProductName) 
    select ProductName 
    from SupplierA 
    union 
    select ProductName 
    from SupplierB; 

insert into Suppliers(SupplierName) 
    select 'A' union all select 'B'; 


insert into SupplierProducts(SupplierId, ProductId, SupplierProductCode) 
    select s.SupplierId, p.ProductId, a.ProductCode 
    from SupplierA a join 
     Products p 
     on a.ProductName = p.ProductName cross join 
     (select SupplierId from Suppliers where SupplierName = 'A') s; 

insert into SupplierProducts(SupplierId, ProductId, SupplierProductCode) 
    select s.SupplierId, p.ProductId, b.ProductCode 
    from SupplierB b join 
     Products p 
     on b.ProductName = p.ProductName cross join 
     (select SupplierId from Suppliers where SupplierName = 'B') s; 
+0

謝謝你,我會試試看。 但有些產品實際上是相同的,但供應商的拼寫名稱不同。有什麼辦法可以比較類似的名字並放在一行? – Boyz 2014-10-05 17:16:58

+0

@Boyz。 。 。這正是你爲什麼要爲自己的產品命名的原因。您可以在SupplierProducts表中有另一列,如'ProductName'。儘管如此,您將不得不努力解開您的數據。 – 2014-10-05 22:18:49

+0

謝謝你的評論。我會嘗試。 – Boyz 2014-10-06 01:26:34

相關問題