2011-08-25 77 views
0

我有一個名爲產品表,產品有幾個領域,那些2是重要的在這個問題上,列ID和列ProdDetail。SQL查詢到一個(這是通過加入做什麼?)

我有另一個表讓我們稱之爲table2。表2有一個ID列和一個名稱列。

我想運行一個SQL查詢,其執行以下操作:

insert into table3 products.ID and table2.ID 
where products.ProdDetail CONTAINS table2.Name 

我知道這個代碼是不是有效的SQL語句。此外,我無法使用連接,因爲products.ProdDetail包含的數據比table2.name更多,因此它們不完全相同。

+0

你或許應該更正數據,如果你有一個字段與一羣在它 – JNK

+1

不同的數據元素的我不太明白你的問題,但你可以在你的JOIN條件,例如使用LIKE 'ON products.ProdDetail LIKE CONCAT(「%」,table2.name,「%」)' – shesek

+0

@JNK基礎上的聲譽IM假設你已經處理的情況時,你必須超越別人的 - 也許,低於-great - 之前的數據結構,你所建議的就是我現在試圖做的事情:)高效地 – Qqbt

回答

3

你的意思是這樣的嗎?

INSERT INTO table3 (ProductID, Table2ID) 
     SELECT product.Id, 
       table2.ID 
     FROM products 
       INNER JOIN table2 ON products.ProdDetail LIKE CONCAT('%', table2.name, '%') 
+0

確切地說,謝謝:) – Qqbt

+0

@Andris,我很困惑,你說table3有兩個字段,'id'和'name',但是你想插入兩個id到這些字段? – Johan

+0

@Johan你困惑,因爲你可能誤解了問題,我從來沒有說過關於表3的田地什麼,表2具有ID和名稱領域:)看了一遍,:) – Qqbt

1
INSERT INTO table3 (id, name) 
SELECT 
    p.id as ID 
    , p.productDetail as name 
FROM products p 
INNER JOIN table2 t2 ON (t2.id = p.id) 
     AND (p.productdetail LIKE CONCAT('%',t2.name,'%') 
+0

這是一個正確的也COALESCE,這可能是用於過濾NULL值的行,對嗎? – Qqbt

1
INSERT INTO 
    table3 
SELECT 
    products.ID, 
    table2.ID 
FROM 
    products 
INNER JOIN 
    table2 
    ON products.ProdDetail LIKE '%' + table2.Name + '%' 
+0

你確定這個語法是允許的嗎? '%'+ table2.Name +'%''IIRC,CONCAT是必需的。 – Johan

+0

這取決於SQL的版本。我已經看到'+','''和'&'以及更詳細的'CONCAT()'函數。 – MatBailie

1

認爲這是你想要什麼:

INSERT INTO Table3 (prod_id, table2_id) 
SELECT 
    P.id, 
    T2.id 
FROM 
    Products P 
INNER JOIN Table2 T2 ON 
    P.ProdDetail LIKE '%' + T2.name + '%' 

請記住,如果你有任何表2的名稱是另一個名稱的子字符串你會得到重複/錯誤的數據。例如,如果您有Table2名稱的「窗口小部件」和「foobar窗口小部件」,並且您有「這些是foobar窗口小部件」的產品說明,那麼它將把兩個Table2行與Product行關聯起來。

+0

我知道,這是我想要的:)第三張桌子將幫助我創建兩個桌子之間的多對多關聯 – Qqbt