2

我在表 ps_product_lang 中有这些信息:

id_product  id_lang
1           1  
1           2
1           3
2           1
3           1
4           1
5           1
5           2
5           3

输出应该是

id_product  id_lang
1           1  
1           2
1           3
2           2
3           2
4           2
5           1
5           2
5           3

我想更新具有唯一 id_product 的记录,并且 id_lang 应该是 1 这意味着关注第 4、第 5 和第 6 条记录:

我试过这个查询,但它不起作用

UPDATE `ps_product_lang` p 
SET    p.`id_lang` = '2' 
WHERE  p.`id_lang` = '1' 
       AND p.id_product NOT IN (SELECT `id_product` 
                                FROM   `ps_product_lang` ps 
                                WHERE  p.id_product = ps.id_product 
                                       AND ps.id_lang = '2'); 
4

4 回答 4

2

按照您的方式执行此操作,但只需进行内部选择。

 UPDATE `ps_product_lang`  
 SET    `id_lang` = '2' 
 WHERE  `id_lang` = '1' 
   AND id_product NOT IN (select `id_product` from (SELECT `id_product` 
                            FROM   `ps_product_lang`  
                            WHERE  id_product = id_product 
                                   AND id_lang = '2')t ); 

演示在这里

于 2013-10-31T12:09:35.097 回答
2

你可以试试这个:

UPDATE `ps_product_lang` p
INNER JOIN (
  SELECT id_product
  FROM ps_product_lang
  GROUP BY id_product
  HAVING COUNT(*) = 1
  ) b ON b.id_product = p.id_product
SET p.`id_lang` = '2'
WHERE p.`id_lang` = '1'

sqlfiddle demo

内部查询仅获取具有唯一 product_id 的行,并更新具有 id_lang = 1 的行。

于 2013-10-31T12:16:07.130 回答
0

您的请求有矛盾:

p.id_product not in

反对

p.id_product= ps.id_product
于 2013-10-31T12:05:44.430 回答
0
UPDATE `ps_product_lang` p 
SET    p.`id_lang` = '2' 
WHERE  p.`id_lang` = '1' 
AND id_product IN(SELECT id_product FROM
(SELECT  id_product FROM ps_product_lang GROUP BY    id_product HAVING COUNT(*)=1 )as x)

SQL小提琴

于 2013-10-31T12:07:17.970 回答