【问题标题】:MySQL - Populate table column with values from another tableMySQL - 用另一个表中的值填充表列
【发布时间】:2023-03-21 07:47:01
【问题描述】:

请帮忙。创建一个基本的关系数据库并尝试将我的帐户表中的列值添加到我的登录表中。但是,有点坚持如何实现这一目标。我正在尝试使用 AccountID、Username、Sign_in 数据来填充 Login 表,但执行时没有出现任何内容。 我的代码:

CREATE TABLE IF NOT EXISTS Account 
(  
  AccountID int NOT NULL AUTO_INCREMENT,
  Title VARCHAR(64) NOT NULL,  
  FirstName varchar(16) NOT NULL,  
  LastName varchar(32) NOT NULL,  
  DOB DATE,  
  Email VARCHAR(255),  
  Username varchar(32) UNIQUE NOT NULL,
  Sign_in varchar(32) UNIQUE NOT NULL,
  PRIMARY KEY (AccountID)
);
ALTER TABLE Account AUTO_INCREMENT=1;

CREATE TABLE IF NOT EXISTS Login 
(  
  LoginID int NOT NULL AUTO_INCREMENT PRIMARY KEY,
  AccountID INT NOT NULL,  
  Username varchar(32) NOT NULL,  
  Sign_in varchar(32) NOT NULL,
  LoginDate TIMESTAMP(6),
  FOREIGN KEY (AccountID) REFERENCES Account(AccountID),
  FOREIGN KEY (Username) REFERENCES Account(Username),
  FOREIGN KEY (Sign_in) REFERENCES Account(Sign_in)
);
ALTER TABLE Login AUTO_INCREMENT=100;

并尝试了查询(根据此论坛上的类似查询编辑)无济于事

INSERT INTO Login
(
  AccountID,
  Username,
  Sign_in
)
SELECT
a.AccountID, a.Username, a.Sign_in
FROM Account a
INNER JOIN Login
ON a.AccountID = l.AccountID;
Select * from Login;

帮助/建议表示赞赏。

【问题讨论】:

    标签: mysql sql syntax relational-database


    【解决方案1】:

    您错过了关系数据库的重点。您只是想映射到主键然后查找其他值。您不想将值存储在两个地方。

    所以:

    CREATE TABLE IF NOT EXISTS Account  (  
      AccountID int AUTO_INCREMENT PRIMARY KEY,
      Title VARCHAR(64) NOT NULL,  
      FirstName varchar(16) NOT NULL,  
      LastName varchar(32) NOT NULL,  
      DOB DATE,  
      Email VARCHAR(255),  
      Username varchar(32) UNIQUE NOT NULL,
      Sign_in varchar(32) UNIQUE NOT NULL
    );
    
    CREATE TABLE IF NOT EXISTS Login  (  
      LoginID int NOT NULL AUTO_INCREMENT PRIMARY KEY,
      AccountID INT NOT NULL,  
      LoginDate TIMESTAMP(6),
      FOREIGN KEY (AccountID) REFERENCES Account(AccountID)
    );
    

    如果您想要username 或sign_in,则使用JOIN 来查找该信息。

    我看不出设置自动增量值的理由。在所有表中让它们从1 开始通常没有问题。

    【讨论】:

    • 我知道这会被指出,我有我的理由,它与另一个链接各种其他表的表有关。但我想知道如何将指定值从帐户插入到登录。编码似乎执行得很好,但它没有产生预期的结果,因为我得到“没有要显示的结果”。正如我所说,代码看起来很好,我希望插入值并按预期​​显示。谢谢
    • @BeavertownPint 。 . .您也可以在这些表之间 JOIN 到 JOIN 到其他表。在大多数情况下,您不希望跨表复制数据。
    • 对不起,又是我!删除了LoginID 并将AccountID 引用为PK 用于Login 表。然后运行:SELECT Account.AccountID, Account.Username, Account.Sign_in FROM Account INNER JOIN Login ON Account.AccountID = Login.AccountID; 我仍然没有显示结果。
    【解决方案2】:

    设法解决了...

    INSERT INTO Login (AccountID, Username, Sign_in)
    SELECT AccountID, Username, Sign_in
    FROM Account;
    

    确实接受了有关主键 ID 建议的建议。干杯

    【讨论】:

      猜你喜欢
      • 2015-03-19
      • 2022-08-18
      • 2017-03-02
      • 1970-01-01
      • 1970-01-01
      • 2015-02-07
      • 1970-01-01
      • 2022-08-22
      • 1970-01-01
      相关资源
      最近更新 更多