2017-12-05 21 views
0

ここに私の質問があります:私はクラスのすべてのゲームを取得しようとしています。クラスはゲームを主催することも、別のクラスのゲームを持つこともできます。JOINの重複結果

ゲームテーブルがあります。guest_class(クラスのID)とhost_class(クラスのID)

クラステーブルがあります。id_class(クラスのID)

私はゲームを取得しようとしています例をクラス1 1.

id_game: 1, id_class: 1, host_class: 3, guest_class: 1, 
id_game: 2, id_class: 1, host_class: 1, guest_class: 6, 

は、なぜ私は重複した結果を取得していたクラスで唯一の2試合がありますか?

QUERY

var classID = Number(req.query.searchValue); 
var query = `SELECT * FROM games g 
LEFT JOIN classes c ON c.id_class = g.host_class OR c.id_class = g.guest_class 
WHERE (g.host_class = ? OR g.guest_class = ?)`; 
con2.query(query, [classID,classID] , function (err, result) { 

RESULT

[ RowDataPacket { 
    id_game: 1, 
    date: 2017-12-04T23:00:00.000Z, 
    host_class: 3, 
    guest_class: 1, 
    host_score: 34, 
    guest_score: 74, 
    tournament_id: 0, 
    group_id: 1, 
    statistics: '', 
    incidents: '', 
    id_class: 1}, 
    RowDataPacket { 
    id_game: 1, 
    date: 2017-12-04T23:00:00.000Z, 
    host_class: 3, 
    guest_class: 1, 
    host_score: 34, 
    guest_score: 74, 
    tournament_id: 0, 
    group_id: 1, 
    statistics: '', 
    incidents: '', 
    id_class: 3}, 
    RowDataPacket { 
    id_game: 2, 
    date: 2017-11-30T23:00:00.000Z, 
    host_class: 1, 
    guest_class: 6, 
    host_score: 84, 
    guest_score: 57, 
    tournament_id: 0, 
    group_id: 1, 
    statistics: '', 
    incidents: '', 
    id_class: 1}, 
    RowDataPacket { 
    id_game: 2, 
    date: 2017-11-30T23:00:00.000Z, 
    host_class: 1, 
    guest_class: 6, 
    host_score: 84, 
    guest_score: 57, 
    tournament_id: 0, 
    group_id: 1, 
    statistics: '', 
    incidents: '', 
    id_class: 6} ] 
+0

は、左結合を使用する理由クラスにマッチのないgame.classがありますか? –

+1

なぜ、 'class_id'しか持っていないのなら、クラスに参加するのですか?あなたはすでにゲームでそれを持っています。 –

+0

私はゲームのクラスのIDを持っていますが、クラスの名前やその他の情報はありません。わかりやすく私はその情報をRESULTに入れませんでした – Pfeiff86

答えて

1

は、あなたがこのようにしようとするだろう。

select * from games where id_game IN (
SELECT g.id_game FROM games g 
LEFT JOIN classes c ON c.id_class = g.host_class OR c.id_class = g.guest_class 
WHERE (g.host_class = ? OR g.guest_class = ?) 
group by g.id_game) 
0

私はあなたがそのために参加する必要がいけないクラス1

を持つ唯一の2試合があり、クラス1のゲームを取得しようとしています:

SELECT * 
FROM games g 
WHERE g.host_class = ? OR g.guest_class = ? 
関連する問題