【问题标题】:SQL query - sync tablesSQL 查询 - 同步表
【发布时间】:2012-07-31 00:16:32
【问题描述】:

我有 2 张桌子。 AuthUser

Auth 有 ff。列(来源)18883 行

id | username | password

用户拥有 ff。列(目标)18868 行

id | username | first name | last name | email

auth.id = user.id
auth.username = user.username

现在由于某种原因,User 表的行中缺少某些用户名。 我想做的是制作一个脚本,在User 上查找缺失的行,并从Auth 插入id 和用户名,然后插入first name='fname'、last name='lname'、email= 'name@domain.com'。

所以两个表的行数相同并且是同步的。

谢谢。

【问题讨论】:

  • 我尝试手动查找丢失的每一行并进行插入。

标签: sql


【解决方案1】:

您不清楚缺少什么。 . . id 或用户名或两者兼而有之。假设用户名指定缺失,以下查询会执行您想要的操作:

insert into user(id, uesrname, firstname, lsatname, email)
    select a.id, a.username. 'fname', lname', 'name@domain.com'
    from auth a left outer join
         user u
         on a.username = u.username
    where u.id is null

这假设用户名在用户表中没有重复。

名为“id”的列在两个表中具有相同的值似乎很奇怪。你应该重新审视你的数据结构,看看是否真的如此。通常,“id”是一个自动递增的主键。

【讨论】:

  • 两者实际上都会丢失。
  • 但是连接两个表的键是复合键还是一个字段足以作为键?
  • auth id 是密钥,但用户 id 不是。它只是从 auth 获取 id 和用户名。至于身份验证 ID 自动增量。
  • 奇怪,在实时数据库上尝试过。它说违反了主键约束pK_user....
  • 即使 id 在两者上同步,它的插入也很奇怪。
猜你喜欢
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 2011-04-23
  • 1970-01-01
  • 1970-01-01
  • 2021-02-26
  • 1970-01-01
  • 2023-03-28
相关资源
最近更新 更多