2014-10-30 34 views
1

学习SQL与H2数据库。更新表格的行,如果它们符合依赖于其他表的标准

CLOTHES表:

------------- 
| 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=FALSEINVENTORY对应于SHIRT类型的衣服所有条目。在这种情况下,第一行,第二行,第三行和第四行是(因为这些条目具有ID12,其对应CLOTHES表中的类型SHIRT的衣服)。因此,我们得到:

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

我可以在INVENTORY迭代每一行做到这一点,利用其CLOTHING_ID,然后在CLOTHES检查与这样的ID一排,并检查它的类型是SHIRT。如果是,我可以设置USING=FALSE

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

回答

1

你可以,如果你知道你要更新

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

您可以使用子查询

什么ID与同一个 INNER JOIN查询实现这一目标
UPDATE INVENTORY SET USING = 'FALSE' 
WHERE CLOTHING_ID IN (SELECT ID FROM CLOTHES WHERE TYPE = 'Shirt') 
相关问题