Mysql 多个外键指向同一个表-歧义问题
我有一个MySQL数据库,其中包含一个包含两个外键的articles表: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
- 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填充。“编辑:这显然不起作用”--正确,但如果您将
用户的实例别名为,它就会起作用。请参阅我的答案。“编辑:这显然不起作用”--正确,但如果您将用户的实例别名为,它将起作用。看看我的答案。