帮助形成SQL查询
我需要一些帮助来构建SQL查询(在MySQL中)。我有两张桌子。表1和表2位于不同的db主机/模式上 表1包含custid、tag、prod1id、prod2id和prod3id 表2包含custid和prodid 现在,查询将更新表1的标记字段。如果表2中还存在特定客户的prod1id、prod2id和prod3id条目,则该字段需要为1。这里有一个例子 表1帮助形成SQL查询,sql,mysql,database,Sql,Mysql,Database,我需要一些帮助来构建SQL查询(在MySQL中)。我有两张桌子。表1和表2位于不同的db主机/模式上 表1包含custid、tag、prod1id、prod2id和prod3id 表2包含custid和prodid 现在,查询将更新表1的标记字段。如果表2中还存在特定客户的prod1id、prod2id和prod3id条目,则该字段需要为1。这里有一个例子 表1 custid, tag, prod1id, prod2id, prod3id 1 1 12 13
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
customer#2的标记字段为0,因为表2中不存在25的prod2id。
有人能帮我形成这个查询吗?类似的东西应该可以工作(我前面没有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
这应该起作用:
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)
这里有一种方法,我们不必为每个prodid执行
连接
(或存在
):
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;
谢谢你的回复。表1与表2位于不同的数据库主机中。在这种情况下我需要做什么?谢谢你的回复。表1与表2位于不同的数据库主机中。在这种情况下我需要做什么?