对上面两个表的字段区分,比如system_users 的user_name在channel_users中命名是user_name_c,重新优化上面的sql
时间: 2024-12-19 11:28:54 浏览: 5
如果你想匹配`system_users`表中的`user_name`字段,即使它在`channel_users`表中被命名为`user_name_c`,你可以通过指定别名或者使用双引号包含列名来明确指定。这里是调整后的SQL语句:
```sql
INSERT INTO system_users (
user_id,
institution_code,
`user_name`, -- 使用反引号包围列名以避免冲突
status,
id_number,
phone_number,
level
)
SELECT
cu.user_id,
cu.institution_code,
cu.`user_name_c` AS user_name, -- 明确指定了channel_users表中的user_name_c列
cu.status,
cu.id_number,
cu.phone_number,
cu.level
FROM
channel_users cu
WHERE
cu.user_id IN (SELECT DISTINCT user_id FROM system_users) -- 确保只更新系统中不存在的用户
ON DUPLICATE KEY UPDATE
institution_code = VALUES(institution_code),
user_name = VALUES(user_name),
status = VALUES(status),
id_number = VALUES(id_number),
phone_number = VALUES(phone_number),
level = VALUES(level);
```
现在,SQL将正确地处理两个表之间的字段映射。
阅读全文