我有 2 张桌子 -ACCOUNTS
和USERS
:
帐户:
CREATE TABLE `ACCOUNTS` (
`pk` bigint(10) unsigned NOT NULL AUTO_INCREMENT,
`user_id` varchar(9) NOT NULL,
`primary` varchar(1) NOT NULL DEFAULT 'N',
`edit_on` bigint(10) unsigned DEFAULT NULL,
`status` varchar(1) NOT NULL DEFAULT 'A',
PRIMARY KEY (`pk`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=1234567890 DEFAULT CHARSET=latin1
用户:
CREATE TABLE `USERS` (
`user_id` bigint(9) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
如果edit_on
包含非空值,则表示该条目是对现有条目的编辑,其pk
包含在edit_on
.
这是我想要做的:
- 对于每一个
user_id
inACCOUNTS
,都应该有一个匹配user_id
的 inUSERS
。 - 如果
edit_on
是not null
,则应该存在一个等于 this (input)和等于 this (input)ACCOUNTS
的条目。对于那个(旧)条目,应该设置为.pk
edit_on
user_id
user_id
status
E
- 如果, 那么对于具有特定,
primary = 'Y'
的其他行应设置为ACCOUNTS
user_id
primary
'N'
在尝试了很多不同的查询(使用ON DUPLICATE UPDATE
等)之后,我仍然找不到解决方案。请帮忙,因为我已经为此工作了整整 2 天。提前致谢。
编辑
这是我迄今为止尝试过的一些事情:
insert into ACCOUNTS
case
when edit_on is null
then
select null, '222222222', 'N', null)
else
select null, '222222222', 'N', pk)
from ACCOUNTS
where '222222222' = user_id and '2147483680' = pk
select pk, '222222222', 'N', pk)
on duplicate key update status='E'
end
我还没有做任何事情primary
加上这不是解决方案:D