1

2 つの外部キーを含む article テーブルを持つ 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で 2 回結合し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 に答える