[英]How to add or insert foreign key value in child table from parent table using insert statement
我想在我的子表中使用父表的主鍵。 我創建了一個外鍵來連接 QUESTION 和 ANSWER 表。 下面是我的數據庫的代碼:
用戶表
CREATE TABLE user (
user_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, -- unique index
username VARCHAR(255) NOT NULL,
password VARBINARY(255) NOT NULL, -- password hash, binary
firstname VARCHAR(255) NOT NULL,
lastname VARCHAR(255) DEFAULT NULL,
email VARCHAR(255) DEFAULT NULL,
address VARCHAR(255) DEFAULT NULL,
phone BIGINT DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
CREATE TABLE question (
question_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, -- unique index
questions TEXT NOT NULL,
question_text TEXT NOT NULL,
user_id INT NOT NULL, -- id of the user who have asked
CONSTRAINT user_to_question FOREIGN KEY (user_id) REFERENCES user (user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
CREATE TABLE answer (
answer_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, -- unique index
answer_text TEXT NOT NULL,
question_id INT NOT NULL, -- what question it answers on
user_id INT NOT NULL, -- id of the user who have answered
CONSTRAINT user_to_answer FOREIGN KEY (user_id) REFERENCES user (user_id),
CONSTRAINT question_to_answer FOREIGN KEY (question_id) REFERENCES question (question_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
因此,在 USER 表中,我添加了一個新值:
insert into user values(1,"krish","123456789","Krish","D","krish@gmail.com","Mumbai MH","98776");
現在在 QUESTION 表中,我想添加一個新值,並且我想使用 USER 表中的 user_id 值。 由於 user_id 是 QUESTION 表中的外鍵。 所以,到目前為止,我已經嘗試過這個查詢,但它不起作用。
insert into question (question_id,questions,question_text)
SELECT user_id
FROM user
where user_id = 1;
values (1,"What is java","Please Explain in details");
我已經提到了這個問題和解決方案,但它不起作用。 在postgres中將數據從父表插入到子表
您正在嘗試的查詢類似於:
insert into question ( question_id,
questions,
question_text
)
SELECT user_id as question_id,
"What is java" as questions,
"Please Explain in details" as question_text
FROM user
where user_id = 1 ;
但據我所知,你不能只插入這個值,因為
CREATE TABLE answer (
answer_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
answer_text TEXT NOT NULL,
question_id INT NOT NULL,
user_id INT NOT NULL,
你有user_id INT NOT NULL
所以它需要一個值。
就像是:
insert into question ( question_id,
questions,
question_text,
user_id
)
SELECT user_id as question_id,
"What is java" as questions,
"Please Explain in details" as question_text,
user_id
FROM user
where user_id = 1 ;
如果您知道從user
表中選擇的user_id
,則根本不需要SELECT
,只需將其放在VALUES
列表中即可。
INSERT INTO question (question_id,questions,question_text, user_id)
VALUES (1,"What is java","Please Explain in details", 1);
如果您需要使用其他列查找user_id
,您將使用SELECT
。 在這種情況下,您將固定值添加到SELECT
列表中。
INSERT INTO question (question_id,questions,question_text, user_id)
SELECT 1,"What is java","Please Explain in details", user_id
FROM users
WHERE username = 'krish';
如果您在創建用戶后立即執行此操作,您還可以使用LAST_INSERT_ID()
function 來獲取使用自動增量分配的user_id
。
INSERT INTO question (question_id,questions,question_text, user_id)
VALUES (1,"What is java","Please Explain in details", LAST_INSERT_ID());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.