2012-03-09 2 views
0

Есть 4 SQL таблицы:Присоеденяйтесь таблицы возвращения неверных результатов

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

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

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, поэтому, пожалуйста, извините вопрос новичков.

+0

Каким образом исходный запрос дает неверный результат? Вы можете уточнить свой вопрос? Непонятно, что вы пытаетесь угадать. –

+0

@MarkBannister Спасибо за улучшение вопроса. Я внес изменения в вопрос, надеюсь, что теперь станет ясно. –

+1

Я думаю, что люди имеют в виду, когда говорят, чтобы уточнить вопрос: что возвращает вышеприведенный «SELECT» и что вы ожидаете от него? Кроме того, какие СУБД вы нацеливаете? Вы не можете просто выбрать все доступные типы СУБД. – anothershrubery

ответ

1

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

Вы хотите 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, вам не нужно его в этом запросе.

Это INNER JOIN, который даст вам результат, когда каждая строка в таблице A имеет соответствующую запись в таблице B. Если это не так, вы должны использовать LEFT или RIGHT JOIN.

0

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

+0

У меня есть только эта информация о вопросе. Извините за то же самое. –

0

Я бы сначала сменил ваш запрос на использование более современного синтаксиса соединения, которое позволяет внешних присоединяется. Tr это:

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 

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