2个外键引用同一张表

Naj*_*oua 4 mysql database foreign-keys primary-key

我可以在同一个表中有两个外键,这些外键引用另一个名为profil(相同的表)的表吗?

我的表是MailSent,它包含:主键(Id),日期,foreignkey1(profil_sender),foreignkey2(profil_receiver)

Ami*_*agh 12

我们可以有两个外键引用同一个表,正如“@zhou yun”答案中提到的,为了实现这一点,表将如下所示:

create table MailSent(

  Id int primary key,

  profil_sender_id int,

  profil_receiver_id int,

  FOREIGN KEY (profil_sender_id) REFERENCES profil(id),

  FOREIGN KEY (profil_receiver_id) REFERENCES profil(id)

)
Run Code Online (Sandbox Code Playgroud)

要从这两个表中进行选择并使用两个外键连接这两个表,请求将如下所示:

SELECT ms.*, ps.first_name as name_sender,pr.first_name as name_reciver  
FROM MailSent ms 
LEFT JOIN profil ps 
ON ms.profil_sender_id= ps.id
LEFT JOIN profil pr 
ON ms.profil_receiver_id= pr.id
Run Code Online (Sandbox Code Playgroud)


Rim*_*han 7

将外键添加(profil_sender_id, profil_receiver_id)到现有表中(MailSent),请按照下列步骤操作:

ALTER TABLE MailSent ADD CONSTRAINT fk_profile_sender_id FOREIGN KEY (profil_sender_id) REFERENCES TABLE-NAME(id);

ALTER TABLE MailSent ADD CONSTRAINT fk_profil_receiver_id FOREIGN KEY (profil_receiver_id) REFERENCES TABLE-NAME(id);
Run Code Online (Sandbox Code Playgroud)


zho*_*yun 6

如果你想在创建表时添加外键,可以这样做:

create table MailSent(

  Id int primary key,

  date datetime,

  profil_sender int,

  profil_receiver int,

  CONSTRAINT fk_sender FOREIGN KEY (profil_sender) REFERENCES profil(id),

  CONSTRAINT fk_receiver FOREIGN KEY (profil_receiver) REFERENCES profil(id)

)
Run Code Online (Sandbox Code Playgroud)