1

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

  • fk_id_user_created
  • fk_id_user_edited

用户表如下所示

  • pk_id_user
  • 用户名

如何连接这些表,以便返回创建和编辑文章的用户的用户名?明显有歧义问题...

编辑:这显然不起作用:

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
4

2 回答 2

4

加入users两次articles,提供一个别名来区分实例:

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
;
于 2012-08-14T00:50:30.353 回答
0

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

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;

而且我没有使用连接,我只是假设 user_id_created 和 user_id_edited 是相同的。

于 2012-08-14T00:43:49.267 回答