使用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
2
或SHIRT
,对应于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
。
这是几个步骤。这可以在单个查询中实现吗?
答案 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')