这解释起来有点混乱,但基本上我有一个父表fruits
和一个子表fruits_sub
,后者通过外键fruits_id
引用fruits
。
水果:
| 水果_id|编号_0列|编号_1列|
| - ------|- ------|- ------|
| 1个|无|1个|
| 第二章|无|1个|
水果子样本:
| 水果_id|枚举|
| - ------|- ------|
| 1个|无|
| 1个|1个|fruits_sub
中行的存在是事实的来源,它告诉我们是否应该在fruits
表中启用相应的枚举列。例如,如果我们查看fruits_sub
中fruits_id
为1的行,则有两个enum
为0和1的条目。这意味着在fruits
中,应启用enum_0_col
和enum_1_col
(设置为值1)。但是,enum_0_col
被错误地设置为0,所以我想更新表并将其设置为1。fruits_sub
表中完全缺少2的fruits_id
,这意味着在fruits
中,该行应该将enum_0_col
和enum_0_col
都设置为0,我希望更新表以反映这一点。
这是一个查询,我试图找出哪些条目对于0的枚举有"不匹配":
CASE
WHEN
NOT EXISTS ( SELECT fruits_id FROM fruits_sub
WHERE enum = 0 )
THEN
SELECT * from fruits
WHERE fruits.fruits_id = fruits_sub.fruits_id
AND fruits.enum_0_col = 1
WHEN
EXISTS ( SELECT fruits_id from fruits_sub
WHERE enum = 0 )
THEN
SELECT * FROM fruits
WHERE fruits.fruits_id = fruits_sub.fruits_id
AND fruits.enum_0_col = 0
END
然后,我对枚举1执行了一个类似的查询。我发现上面的查询存在语法错误,我猜可能是因为我无法在两个不同的表上执行select子句
1条答案
按热度按时间zxlwwiss1#
要使“fruits”表与“fruits_sub”表保持同步,实际上需要:
(我现在将这些保持得相对简单,所以希望您能够很容易地辨别出在每个步骤中到底发生了什么)
首先删除现有的“fruits”行(其中没有对应的“fruits_sub”行):
插入新行(枚举值首先默认为零,然后更新):
根据现有的“fruits_sub”枚举,更新现有的“fruits”行: