我确信这个问题有一个简单的解决方案,但是我在解决这个问题时遇到了一些障碍。
我有一个包含以下模式的表(删节,因为实际上数据是由多个表的连接创建的):
Order | Item | Shipped
1 1 N
1 2 N
2 1 N
2 5 N
5 6 N
5 2 N
...
关于架构的说明:
我需要一种方法将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);
显然不起作用(因为它不会标记,例如订单#2 中的项目#1 )。
答案 0 :(得分:1)
应该是这个
UPDATE MyTable
SET Shipped='Y'
WHERE (order, item) not in((1,2), (2,1)... )
((1,2),(2,1)...)==你的列表..可能是正确选择或正确字符串的结果
答案 1 :(得分:0)
您可以根据输入数组创建条件列表:
UPDATE MyTable
SET Shipped='Y'
WHERE NOT
(
( Order = 1 AND Item IN (1))
OR
( Order = 5 AND Item IN (2,6))
)