2013-09-17 5 views
0

Вот sqlMySQL возвращает тот же результат несколько раз даже с отчетливым

 SELECT DISTINCT 
      t1.`name` team1_name, 
      t1.id team1_id, 
      t2.id team2_id, 
      t2.`name` team2_name, 
      sc.`name_en` sportCatname, 
      c.title championshipTitle, 
      e.date eventDate, 
      e.id eventId, 
      e.title, 
     FROM 
      `Event` e, 
      `SportCategory` sc, 
      `Championship` c, 
      `Team` t1, 
      `Team` t2 
     WHERE 
      e.top = 1 
     AND t1.id = e.team1ID 
     AND t2.id = e.team2ID 
AND sc.id = c.sportCategoryID 

Пробовал с РЕГИСТРИРУЙТЕСЬ также. Ни за что. Он возвращает правильные строки, но в результирующем наборе у меня такая же строка 2 раза. Что я делаю не так?

+1

Вы должны действительно использовать явные 'JOIN' над устаревшими неявными объединениями в предложении' WHERE'. –

ответ

1

Нет никакой связи для SportCategory и Championship в разделе where. Это и есть причина для получения дублирующих результатов.

Вы должны указать связь в предложении where.

+0

'AND sc.id = c.sportCategoryID' добавил эту строку. Теперь каждый результат 2 раза в наборе результатов. Да, это сократило строки результатов. Но не до 1 раз – heron

+0

@heron: вы должны добавить anothr один. одна из таблиц должна быть либо «SportCategory», либо «Championship», а другая - из остальных трех таблиц. – sarwar026

+0

Это очень хороший пример, почему следует избегать устаревших неявных объединений в предложении 'where'. При использовании явного синтаксиса JOIN вы не можете случайно забыть о соединении и создать декартовой продукт. –

0

Вы можете проверить, нет ли в каком-либо столбце специальных символов, которые не находятся в других строках?

Смежные вопросы