2010-04-25 2 views
1

У меня есть следующие таблицы:MySQL Регистрация проблема

--table sportactivity-- 

sport_activity_id, home_team_fk, away_team_fk, competition_id_fk, date, time 

(кортеж пример) -> 1, 33, 41, 5, 2010-04-14, 05:40:00

--table teams-- 

team_id, team_name 

(кортеж пример) -> 1, Алжир

Теперь у меня есть следующий SQL Постулаты, которые я использую для извлечения команды A против команды B

SELECT sport_activity_id, T1.team_name AS TeamA, T2.team_name AS TeamB, DATE_FORMAT(DATE, '%d/%m/%Y') AS DATE, DATE_FORMAT(TIME, '%H:%i') AS TIME 

FROM sportactivity 

JOIN teams T1 ON home_team_fk = T1.team_id 

JOIN teams T2 ON (away_team_fk = T2.team_id 

OR away_team_fk = '0') 

WHERE DATE(DATE) >= CURDATE() 

ORDER BY DATE(DATE) 

Моя проблема в том, что когда команда B пуста, у меня есть нерелевантная информация ... кажется, что она возвращает все комбинации. Мне нужен запрос, когда команда B равна 0 (это может произойти в моем сценарии), я получаю только Team A - Team B (как 0) один раз.

ответ

3

Используйте ЛЕВУЮ ВНУТРЕННУЮ РАБОТУ вместо ВХОДНОЙ ВСТУПЛЕНИЯ. То есть, это изменить:

JOIN teams T2 ON (away_team_fk = T2.team_id OR away_team_fk = '0') 

к этому:

LEFT JOIN teams T2 ON away_team_fk = T2.team_id 

Это должно возвращать нули для столбцов в T2 в случае, когда away_team_fk = 0 (при условии, что такой строки не существует).

+0

это работало! благодаря – mouthpiec

0

Вы пытались использовать ключевое слово DISTINCT?

SELECT DISTINCT sport_activity_id, T1.team_name AS TeamA, T2.team_name AS TeamB, DATE_FORMAT(DATE, '%d/%m/%Y') AS DATE, DATE_FORMAT(TIME, '%H:%i') AS TIME 

FROM sportactivity 

JOIN teams T1 ON home_team_fk = T1.team_id 

JOIN teams T2 ON (away_team_fk = T2.team_id 

OR away_team_fk = '0') 

WHERE DATE(DATE) >= CURDATE() 

ORDER BY DATE(DATE) 

Это будет гарантировать, что если строка повторяется, все данные одинаковы, она отображается только один раз.

Как если бы вы

1 abc abc 10/22/10 12:00:00 
1 abc abc 10/22/10 12:00:00 
2 abc dcb 10/22/10 12:00:00 

Вы бы

1 abc abc 10/22/10 12:00:00 
2 abc dcb 10/22/10 12:00:00 

вернулся вместо

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