MySQL更新列,其值来自不同的表

MySQL更新列,其值来自不同的表,mysql,Mysql,我有两个具有以下结构和示例内容的表。表1的membership_no设置为正确的值,但表2的membership_no列中有一些不正确的值。我需要查询这两个表并检查成员资格值是否不相等,然后使用表1中的值更新表2的成员资格列 表一: id membership_no ==================== 800960 800960 800965 800965 表二: id membership_no ==================== 800960 800970 80

我有两个具有以下结构和示例内容的表。表1的membership_no设置为正确的值,但表2的membership_no列中有一些不正确的值。我需要查询这两个表并检查成员资格值是否不相等,然后使用表1中的值更新表2的成员资格列

表一:

id     membership_no
====================
800960 800960
800965 800965
表二:

id     membership_no
====================
800960 800970
800965 800975
到目前为止更新查询。它没有捕获表2中所有不正确的值

UPDATE
tabletwo
    INNER JOIN
    tableone ON tabletwo.id = tableone.id
SET 
    tabletwo.membership_no = tableone.membership_no;
编辑:包括显示、创建和选择不匹配成员资格的查询\u无列值。

表一显示:

CREATE TABLE `n2z7m3_kiduka_accounts_j15` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`membership_no` int(11) NOT NULL,
...
`membershipyear` varchar(100) NOT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `user_id` (`user_id`)
 ) ENGINE=InnoDB AUTO_INCREMENT=800987 DEFAULT CHARSET=utf8
表二显示:

CREATE TABLE `n2z7m3_kiduka_accounts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`membership_no` int(11) NOT NULL,
...
`membershipyear` varchar(100) NOT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `user_id` (`user_id`)
 ) ENGINE=InnoDB AUTO_INCREMENT=801072 DEFAULT CHARSET=utf8
选择查询不匹配的成员资格\u无列值:

SELECT 
    u.name,
    a.membership_no as 'Joomla 1.5 accounts table', 
    j.membership_no as 'Joomla 3.0 accounts table' 
FROM 
    n2z7m3_kiduka_accounts_j15 AS a 
    INNER JOIN n2z7m3_users AS u ON a.user_id = u.id
    INNER JOIN n2z7m3_kiduka_accounts AS j ON a.user_id = j.membership_no 
    and a.membership_no != j.membership_no
ORDER BY u.name;

您只需添加一个
WHERE
子句:

UPDATE
    tabletwo
INNER JOIN
    tableone
    ON tabletwo.id = tableone.id
SET 
    tabletwo.membership_no = tableone.membership_no
WHERE tabletwo.membership_no <> tableone.membership_no
更新
表二
内连接
表一
在tabletwo.id=tableone.id上
设置
tabletwo.membership\u no=tableone.membership\u no
其中table2.membership\u no table1.membership\u no

您只需添加一个
WHERE
子句:

UPDATE
    tabletwo
INNER JOIN
    tableone
    ON tabletwo.id = tableone.id
SET 
    tabletwo.membership_no = tableone.membership_no
WHERE tabletwo.membership_no <> tableone.membership_no
更新
表二
内连接
表一
在tabletwo.id=tableone.id上
设置
tabletwo.membership\u no=tableone.membership\u no
其中table2.membership\u no table1.membership\u no
虽然过滤器完全有效,但另一种变体是将过滤器限定符添加到
ON
子句中,以便:

UPDATE tabletwo
INNER JOIN
tableone ON tabletwo.id = tableone.id AND tabletwo.membership_no <> tableone.membership_no
SET 
tabletwo.membership_no = tableone.membership_no;
然后

CREATE UNIQUE INDEX`id`ON#将唯一索引添加到A#I列。
虽然过滤器完全有效,但另一种变体是将过滤器限定符添加到
ON
子句中,以便:

UPDATE tabletwo
INNER JOIN
tableone ON tabletwo.id = tableone.id AND tabletwo.membership_no <> tableone.membership_no
SET 
tabletwo.membership_no = tableone.membership_no;
然后

CREATE UNIQUE INDEX`id`ON#将唯一索引添加到A#I列。

但是,考虑到ID和数字显然总是相同的,为什么还要比较这些表呢!?!?它将捕获两个表上出现的所有值,不管它们是否正确。您没有筛选任何内容。如果您可以编辑问题以显示SQL查询的结果:
show CREATE TABLE TABLE two
show CREATE TABLE TABLE one
,这将非常有用。@Martin我已更新我的问题,以包括两个show CREATE TABLE查询和用于查找不匹配项的SELECT查询成员资格没有列值。当我运行您的查询时,多条记录被更改,但是如果我再次运行SELECT查询,两个表之间仍然没有不匹配的成员资格值。谢谢,我已经为您更新了我的answser。但是,鉴于ID和数字显然总是应该相同的,为什么您需要比较所有表!?!?它将捕获两个表上出现的所有值,不管它们是否正确。您没有筛选任何内容。如果您可以编辑问题以显示SQL查询的结果:
show CREATE TABLE TABLE two
show CREATE TABLE TABLE one
,这将非常有用。@Martin我已更新我的问题,以包括两个show CREATE TABLE查询和用于查找不匹配项的SELECT查询成员资格没有列值。当我运行您的查询时,多条记录被更改,但是如果我再次运行SELECT查询,两个表之间仍然没有不匹配的成员资格值。谢谢,我已经为您更新了我的应答器。我怀疑他有某种问题,即使没有where子句,它也应该工作。@sagi no,如果没有
WHERE
子句,它将更新所有加入的记录,而不管成员编号是否相等。确定了吗?它仍然会将每个会员编号更新为正确的值!我怀疑他有某种问题,即使没有where子句,它也应该起作用。@sagi否,如果没有
where
子句,它将更新所有加入的记录,而不管成员数是否相等。好吗?它仍然会将每个会员编号更新为正确的值!