我是新手,所以我为任何困惑/挫折道歉.我感谢任何帮助!
我有一个表(MainTable),我用(GoodTable和BadTable)创建了两个视图.
>每个表有4列(ID,UserID,键,值).
> ID是主键,但是
> UserID可以在多行中重复.
我在Main表中需要做的是找到BAD表中的ID,并根据UserID和LIKE匹配键列的匹配,将GOOD表的value列中的值更新到主表.
我希望这是有道理的.
我试过了:
UPDATE MainTable
SET value = (SELECT value FROM GoodTable
WHERE MainTable.UserID = GoodTable.UserID
AND MainTable.key LIKE "some%key%specifics");
这让我几乎在那里,但问题是如果它没有找到LIKE键细节,它返回一个NULL值,我希望它保持原始值,如果它不在BadTable中(BadTable基本上是所有匹配的键) LIKE密钥细节).显然上面没有使用BadTable,但我认为这可能有助于我解决这个问题(不是这样,到目前为止!)……
这是一个例子:
MainTable:
ID UserID key value
1 1 key1 good value
2 1 key2 bad value
3 1 key3 unrelated value
4 2 key1 good value
5 2 key2 bad value
6 2 key3 unrelated value
GoodTable:
ID UserID key value
1 1 key1 good value
4 2 key1 good value
BadTable:
ID UserID key value
2 1 key2 bad value
5 2 key2 bad value
What I want MainTable to change to:
ID UserID key value
1 1 key1 good value
2 1 key2 good value
3 1 key3 unrelated value
4 2 key1 good value
5 2 key2 good value
6 2 key3 unrelated value
我还想过如果有类似VLOOKUP的东西(比如在Excel中)我可以说如果做错了该怎么做,但我也无法解决这个问题.我从研究其他问题尝试了一些其他的事情,但我现在自己晕了,决定伸出援手:)
最后,我不确定这是否重要,但这对于MySQL来说……
我相信我让自己变得比我需要的更复杂,所以我非常感谢任何人都可以提供帮助!
更新:根据@Rabbit的建议,这是我使用内部连接可以想到的最好的(尽管我认为这会添加到MainTable中,但我想保持MainTable中的行数相同,只需更新一个字段对于适用的行..):
UPDATE MainTable
JOIN GoodTable ON MainTable.ID = GoodTable.ID
SET value = (SELECT value FROM GoodTable
WHERE MainTable.UserID = GoodTable.UserID
AND MainTable.key LIKE "some%key%specifics");
我确信这是一次可怕的尝试,但我肯定是新手!
我确实设法提出了一个解决方案(虽然我确信这是非常低效的) – 请参阅下面的答案! (感谢@DBug和@Rabbit指出我正确的方向!)