如果表的行符合取决于其他表的值的条件,则更新表的行

时间:2014-10-30 06:25:14

标签: sql h2

使用H2数据库学习SQL。

衣服表:

-------------
| ID | TYPE |
-------------
|  1 | Shirt|
|  2 | Shirt|
|  3 | Pants|
|  4 | Pants|
|  5 | Pants|
|  6 | Hat  |
|  7 | Hat  |
-------------

库存表:

-----------------------
| CLOTHING_ID | USING |
-----------------------
|  1          | TRUE  |
|  1          | TRUE  |
|  1          | TRUE  |
|  2          | TRUE  |
|  3          | TRUE  |
|  3          | TRUE  |
-----------------------

我想SET USING=FALSE INVENTORY中与SHIRT类型的衣服相对应的所有条目ID。在这种情况下,第一行,第二行,第三行和第四行(因为这些条目的1 2SHIRT,对应于CLOTHES类型的衣服----------------------- | CLOTHING_ID | USING | ----------------------- | 1 | FALSE | | 1 | FALSE | | 1 | FALSE | | 2 | FALSE | | 3 | TRUE | | 3 | TRUE | ----------------------- 表格。所以我们得到了:

INVENTORY

我可以通过迭代CLOTHING_ID中的每一行,取其CLOTHES,然后在SHIRT中检查具有此类ID的行,并检查其类型是否为{{1 }}。如果是,我可以设置USING=FALSE

这是几个步骤。这可以在单个查询中实现吗?

2 个答案:

答案 0 :(得分:1)

如果您知道要更新的ID

,则可以使用INNER JOIN查询来实现此目的
UPDATE INVENTORY a
INNER JOIN CLOTHES b
ON a.ID = b.CLOTHING_ID
SET b.`USING` = 'FALSE'
WHERE a.ID IN(1,2)

或者,如果您想更新TYPE = Shirt

的位置
UPDATE INVENTORY a
INNER JOIN CLOTHES b
ON a.ID = b.CLOTHING_ID
SET b.`USING` = 'FALSE'
WHERE a.TYPE = 'Shirt'

答案 1 :(得分:1)

您可以使用子查询

UPDATE INVENTORY SET USING = 'FALSE'
WHERE CLOTHING_ID IN (SELECT ID FROM CLOTHES WHERE TYPE = 'Shirt')