Объединение таблиц, возвращающих неверные результаты - PullRequest
0 голосов
/ 09 марта 2012

Есть 4 таблицы sql:

Listings(Amount, GroupKey, Key, MemberKey),
Loans(Amount, GroupKey, Key, ListingKey),
Members(City, GroupKey, Key)
Groups(GroupRank, Key, MemberKey)

Теперь, если кто-то хочет выяснить ссуды, которые также являются списками, и найти город участников и GroupRank для участников в таблице ссуд. Здесь групповая таблица содержит информацию о группе, частью которой являются члены. а также выполните операцию выбора, как указано ниже:

select Listings.Amount, Members.City, Groups.GroupRank
from listings, loans, members, groups
where Listings.Key=Loans.ListingKey and
    Members.Key=Listings.MemberKey and
    Listings.GroupKey=Groups.Key 

Вышеуказанное объединение дает неверный результат, пожалуйста, укажите, где я ошибаюсь. Кроме того, я новичок в SQL, поэтому, пожалуйста, извините новичка вопрос.

Ответы [ 3 ]

1 голос
/ 09 марта 2012

Примечание: ниже приведено лишь предположение, в чем заключается ваша проблема.Как сказали другие, уточните свой вопрос.

Вы хотите JOIN (http://dev.mysql.com/doc/refman/5.1/de/join.html) этих таблиц.То, что вы пишете, является еще одной формой объединения, то есть оно имеет тот же эффект.Но вы "присоединились" слишком много.Чтобы сделать вещи более понятными, был изобретен синтаксис, чтобы сделать вещи более понятными и избежать таких ошибок.Узнайте больше об этом по ссылке, приведенной выше.

То, чего вы хотите достичь, можно сделать следующим образом:

SELECT
Listings.Amount, Members.City, Groups.GroupRank
FROM
Listings
INNER JOIN Groups ON Listings.GroupKey=Groups.Key
INNER JOIN Members ON Members.Key=Listings.MemberKey

Вы не делаете SELECT на таблице Loans, выЭто не нужно в этом запросе.

Это ВНУТРЕННЕЕ СОЕДИНЕНИЕ, которое даст вам результат, в котором каждая строка в таблице А имеет соответствующую запись в таблице В. Если это не так, вы должны использоватьЛЕВОЕ или ПРАВОЕ СОЕДИНЕНИЕ.

0 голосов
/ 09 марта 2012

Я бы сначала изменил ваш запрос, чтобы использовать более современный синтаксис объединения, который допускает external объединения.Для этого:

select Listings.Amount, Members.City, Groups.GroupRank
from listings
left join loans on Listings.Key=Loans.ListingKey
left join members on Members.Key=Listings.MemberKey
left join groups on Listings.GroupKey=Groups.Key 
    and/or Loans.GroupKey=Groups.Key
    and/or Members.Key=Groups.MemberKey

Возможно, вам придется поиграть с критериями последнего соединения (возможно, они должны быть "или" нет "и" и т. Д.).

0 голосов
/ 09 марта 2012

Возможно, проблема связана с типом соединения (INNER).Попробуйте LEFT JOIN, например, но Марк имеет право: вам следует уточнить свой вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...