2011-01-28 77 views
0

我需要一些幫助來構建SQL查詢(在MySQL中)。我有兩張桌子。表1和表2坐落在不同的數據庫主機/架構上。幫助形成SQL查詢

表1已經CUSTID,標籤,prod1id,prod2id,prod3id 表2已經CUSTID,PRODID

現在查詢是更新表1的標記字段。如果某個客戶的表2中也存在prod1id,prod2id,prod3id條目,則該字段必須爲1。下面是一個例子

表1

custid, tag, prod1id, prod2id, prod3id 

1  1 12  13  14 
2  0 24  25  26 

表2

custid, prodid 
1  12 
1  13 
1  14 
2  24 
2  26 

客戶#2標記字段是0,因爲prod2id即25不表2中存在。 有人可以幫助我形成查詢嗎?

回答

1

像這樣的東西應該工作(我沒有的MySQL在我面前),這樣的情況下語句可能需要一些工作

UPDATE 
    Table1 
SET 
    tag = Case 
        WHEN t2p1.custid IS NOT NULL 
         and t2p2.custID IS NOT NULL 
         and t2p3.custId IS NOT NULL then 1 
        ELSE 0 
       END 



FROM 
    table1 t1 
LEFT JOIN Table2 t2p1 
on t1.custid = t2p1.custid 
    and t1.prod1id = t2p1.prodid 

LEFT JOIN Table2 t2p2 
on t1.custid = t2p2.custid 
    and t1.prod2id = t2p2.prodid 

LEFTJOIN Table2 t2p3 
on t1.custid = t2p3.custid 
    and t1.prod3id = t2p3.prodid 
0

這應該工作:

UPDATE Table1 t1 
    SET tag=1 
    WHERE EXISTS(SELECT 1 FROM Table2 t2 WHERE t2.custId = t1.custId AND t2.prodId = t1.prod1Id) 
    AND EXISTS(SELECT 1 FROM Table2 t2 WHERE t2.custId = t1.custId AND t2.prodId = t1.prod2Id) 
    AND EXISTS(SELECT 1 FROM Table2 t2 WHERE t2.custId = t1.custId AND t2.prodId = t1.prod3Id) 
+0

謝謝您的回覆。表1與表2在不同的數據庫主機上。在這種情況下我需要做什麼? – mfr 2011-01-28 18:37:36

0

這裏有一個方法我們不必爲每個prodid做join(或exists):

UPDATE table1, (SELECT table1.custid, (COUNT(*) = 3) AS tag 
        FROM table1 JOIN table2 ON table1.custid = table2.custid 
       WHERE table2.prodid IN (table1.prod1id, table1.prod2id, table1.prod3id) 
       GROUP BY table1.custid) newtags 
SET table1.tag = newtags.tag 
WHERE table1.custid = newtags.custid; 
+0

謝謝你的回覆。表1與表2在不同的數據庫主機上。在這種情況下我需要做什麼? – mfr 2011-01-28 18:56:01