2013-12-12 2 views
0

Привет народа Я озадачен с проблемой я получаю следующий MySQL Query:MySQL выберите с внутренним соединением дает мне зацикливание результату

SELECT 
tp.ID AS tpid, 
p.firstName AS pfname, 
p.lastName AS plname, 
p.dob AS pdob, 
fix.homeTeamID AS fixhtid 

FROM fixtures AS fix 

INNER JOIN teamSeason AS ts ON fix.homeTeamID = ts.ID 
INNER JOIN teamPlayers AS tp ON tp.teamSeasonID = ts.ID 
INNER JOIN person AS p ON tp.personID = p.ID 

WHERE fix.homeTeamID =2 

Я ожидал 9 строк в результат с этим запросом, но вместо этого есть имеют более 180 строк, где оригинальные 9 строк повторяются 19 раз.

Я не уверен, как устранить эту проблему и задавался вопросом, может ли кто-нибудь помочь мне - мой мозг - это месиво.

Я попытался удалить «fix.homeTeamID AS fixhtid» из запроса, но это не остановит результат цикла.

Есть ли способ показать результат без цикла?

Должен ли я публиковать связанные таблицы mysql онлайн, чтобы вы могли видеть?

Благодаря

Пит

UPDATE

Я обновил свой SQL запрос к этому:

SELECT 
tp.ID AS tpid, 

p.firstName AS pfname, 
p.lastName AS plname, 
p.dob AS pdob, 

fix.homeTeamID AS fixhtid 


FROM fixtures AS fix 

INNER JOIN teamSeason AS ts 
ON ts.ID=fix.homeTeamID 

INNER JOIN teamPlayers AS tp 
ON tp.teamSeasonID = ts.ID 

INNER JOIN person AS p 
ON p.ID = tp.personID 

WHERE fix.homeTeamID =2 

GROUP BY tpid 

как предложено Дип. Я добавил «GROUP BY», и он зафиксировал мой результат. Огромное спасибо Дипу и всем остальным, которые нашли время ответить.

Второе обновление

Я обновил запрос снова к этому:

SELECT DISTINCT tp.ID AS tpid, 
    p.firstName AS pfname, 
    p.lastName AS plname, 
    p.dob AS pdob, 

    fix.homeTeamID AS fixhtid 

    FROM fixtures AS fix 

    INNER JOIN teamSeason AS ts 
    ON fix.homeTeamID=ts.ID 

    INNER JOIN teamPlayers AS tp 
    ON tp.teamSeasonID=ts.ID 

    INNER JOIN person AS p 
    ON tp.personID=p.ID 

    WHERE fix.homeTeamID=2 

как предложил Strawberry и Иоанна во имя лучшей практики я заменил «GROUP BY» вместо "SELECT DISTINCT"

Спасибо людям. Я узнал что-то новое.

+0

пользовательскую группу 'by' в запросе с соответствующим полем .. –

+0

вероятно, один из столбцов в РЕГИСТРИРУЙТЕСЬ состоянии это неправильно, и он получает перекрестное соединение. – Mihai

+0

Да, вы должны опубликовать таблицы. Еще лучше, добавьте их здесь, а также в [sqlfiddle] (http://www.sqlfiddle.com). –

ответ

2

Вы хотите, чтобы JOINS добавляли данные на основе ваших исходных данных из светильников. Затем вы должны использовать LEFT JOIN

enter image description here

+0

... на (не необоснованно) предположении, что вы выбираете уникальные объекты из каждой таблицы – Strawberry

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