Mysql 多个外键指向同一个表-歧义问题

Mysql 多个外键指向同一个表-歧义问题,mysql,sql,foreign-key-relationship,Mysql,Sql,Foreign Key Relationship,我有一个MySQL数据库,其中包含一个包含两个外键的articles表: fk_id_用户_已创建 fk_id_用户_已编辑 用户表如下所示 pk\u id\u用户 用户名 如何连接这些表,从而返回创建和编辑文章的用户的用户名?显然有个模棱两可的问题 编辑:这显然不起作用: SELECT articles.title, articles.article, users.username as created_by, users_username as edi

我有一个MySQL数据库,其中包含一个包含两个外键的articles表:

  • fk_id_用户_已创建
  • fk_id_用户_已编辑
用户表如下所示

  • pk\u id\u用户
  • 用户名
如何连接这些表,从而返回创建和编辑文章的用户的用户名?显然有个模棱两可的问题


编辑:这显然不起作用:

SELECT
    articles.title,
    articles.article,
    users.username as created_by,
    users_username as edited_by
FROM
    articles
LEFT JOIN
    users
ON
    articles.fk_id_user_created = users.pk_id_username
LEFT JOIN
    users
ON
    articles.fk_id_user_edited = users.pk_id_username

如果我没听错的话,你是说这样的话

CREATE TABLE USER (
user_id INTEGER PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(255)
);

INSERT INTO USER (username) VALUES
('A'), ('B');

CREATE TABLE article (
id INTEGER PRIMARY KEY AUTO_INCREMENT,
user_id_created INTEGER,
user_id_edited INTEGER
);

INSERT INTO article (user_id_created, user_id_edited)
VALUES (1, 1), (2,1);

SELECT username 
FROM USER 
WHERE user_id IN (SELECT user_id_created FROM article WHERE user_id_created=user_id_edited);

DROP TABLE USER;
DROP TABLE article;

我没有使用连接,我只是假设创建的用户id和编辑的用户id是相同的。

如果我理解正确,你的意思是这样的吗

CREATE TABLE USER (
user_id INTEGER PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(255)
);

INSERT INTO USER (username) VALUES
('A'), ('B');

CREATE TABLE article (
id INTEGER PRIMARY KEY AUTO_INCREMENT,
user_id_created INTEGER,
user_id_edited INTEGER
);

INSERT INTO article (user_id_created, user_id_edited)
VALUES (1, 1), (2,1);

SELECT username 
FROM USER 
WHERE user_id IN (SELECT user_id_created FROM article WHERE user_id_created=user_id_edited);

DROP TABLE USER;
DROP TABLE article;

我没有使用连接,我只是假设创建的用户id与编辑的用户id相同。

用户
文章
连接两次,提供一个别名来区分实例:

select  
  articles.whatever,
  created.username as created_username,
  edited.username as edited_username
from 
  articles
  inner join users as created on articles.fk_id_user_created = created.pk_id_user
  inner join users as edited  on articles.fk_id_user_edited  = edited.pk_id_user
;

使用
文章
两次加入
用户
,提供别名以区分实例:

select  
  articles.whatever,
  created.username as created_username,
  edited.username as edited_username
from 
  articles
  inner join users as created on articles.fk_id_user_created = created.pk_id_user
  inner join users as edited  on articles.fk_id_user_edited  = edited.pk_id_user
;

不,文章可以由一个用户创建,也可以由另一个用户编辑。创建文章时,pk_id_user_edited为空。只有当它被编辑时,它才会被执行编辑的用户的用户id填充。不,一个用户可以创建一篇文章,另一个用户可以编辑一篇文章。创建文章时,pk_id_user_edited为空。只有当它被编辑时,它才会被执行编辑的用户的用户id填充。“编辑:这显然不起作用”--正确,但如果您将
用户的实例别名为
,它就会起作用。请参阅我的答案。“编辑:这显然不起作用”--正确,但如果您将
用户的实例别名为
,它将起作用。看看我的答案。