MySQL:当对不输入对列表(没有主键)时更新

934

我敢肯定有一个简单的方法可以解决这个问题,但是在弄清楚这个问题时我有些脑筋。

背景

我有一个具有以下架构的表(节略,因为实际上数据是通过多个表的联接创建的):

Order |  Item  |  Shipped

1        1         N
1        2         N
2        1         N
2        5         N
5        6         N
5        2         N
        ...

关于模式的注释:

  • 每行由order + item唯一标识,但是未将其设置为主键。
  • 此外,表上没有主键,我也不能添加主键(MySQL DB是旧系统的盲转)。

问题

我需要一种方法来设置Shipped'Y'如果订单+项目对不以+项目对列表存在。

换句话说,我将在其他地方生成一个PHP脚本,生成类似(为了便于阅读而进行编辑):

array(
  'Order1' => array(1),
  'Order5' => array(2, 6)
);

运行查询时,我应该获得以下表结构:

Order |  Item  |  Shipped

1        1         N
1        2         Y
2        1         Y
2        5         Y
5        6         N
5        2         N
        ...

“直觉”的解决方案

UPDATE MyTable
SET Shipped='Y'
WHERE
Order NOT IN (1, 5)
AND Item NOT IN (1, 2, 6);

显然行不通(因为它不标记,例如,第1项订单#2出厂设置)。

scaisEdge

应该是这个

UPDATE MyTable
SET Shipped='Y'
WHERE (order, item) not in((1,2), (2,1)... )

((1,2 ,,(2,1)...)==您的列表..可能是正确选择或正确字符串的结果

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章