2011-01-28 10 views
0

(MySQLで)SQLクエリを作成するにはいくつかの助けが必要です。私は2つのテーブルを持っています。表1と表2は異なるdbホスト/スキーマ上にあります。表1はCUSTIDた、タグ、prod1id、prod2idSQLクエリを作成する際のヘルプ

は、表2をCUSTIDた をprod3id

今すぐクエリは表1のタグフィールドを更新することであるPRODID。特定の顧客のためにprod1id、prod2id、prod3idエントリもTable2に存在する場合、フィールドは1にする必要があります。 25であるprod2idは表2に存在しないので、ここでは表2

例えば

表1

custid, tag, prod1id, prod2id, prod3id 

1  1 12  13  14 
2  0 24  25  26 

ある

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

顧客#2のタグフィールドが0です。 誰かが質問の作成に手伝ってもらえますか?

答えて

1

このような何かが動作するはずです(私は私の前にMySQLを持っていない)ので、case文は、これは動作するはずですいくつかの作業

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

お返事ありがとうございます。私たちはすべてのプロダクトに対してjoin(またはexists)を行う必要はありません。表1は、表2とは異なるDBホストにあります。その場合、私は何をする必要がありますか? – mfr

0

の方法です

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とは異なるDBホストにあります。その場合、私は何をする必要がありますか? – mfr