私がここで得た質問はばかげているように見えるかもしれませんが、MySQLの参加がどのように機能するかを理解できないため、少し頭がおかしくなります。
私は2つのテーブルを持っています:
user;
+--------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(128) | NO | | NULL | |
+--------------------+--------------+------+-----+---------+-------+
game;
+--------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| source_id* | int(11) | NO | | NULL | |
| target_id* | int(11) | NO | | NULL | |
+--------------------+--------------+------+-----+---------+-------+
game.source_id
およびgame.target_id
は、を参照する制約ですuser.id
。
game
ここで、テーブルからすべてを選択し、2人のユーザーがいるため、2人のユーザーの結果名に含めたいと思いgame
ます。target_name
そして、それらの列に具体的に名前を付けたいと思いますsource_name
。
このクエリを試しました:
SELECT
g.id,
u.name
FROM
game g
RIGHT JOIN
user u
ON
u.id = g.source_id
OR
u.id = g.target_id
WHERE
g.source_id = 1
OR
g.target_id = 1
;
しかし、お気づきかもしれませんが、私はエイリアスu.name
を作成しません。また、その方法がわからないため、最終結果は次のようになりますtarget_name
。source_name
+----+------+
| id | name |
+----+------+
| 1 | bo |
| 1 | al |
| 2 | jo |
| 2 | jay |
+----+------+
ご覧のとおりgame
、結果には複数回表示されます。
期待される結果:
+----+-------------+-------------+
| id | target_name | source_name |
+----+-------------+-------------+
| 1 | bo | al |
| 2 | jo | jay |
+----+-------------+-------------+
前もって感謝します。