私がここで得た質問はばかげているように見えるかもしれませんが、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 |
+----+-------------+-------------+
前もって感謝します。