Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с SQL [D7, IB6.x]


xayam ©   (2006-03-18 15:27:00) 

Есть такие таблицы:
COUNTRIES, GAMES, MOVES, PEOPLE, RESULTS, STATUSS,TOWNS, TYPESGAMES
GAMES.ID_P1  INTEGER Белые - ссылка на значение PEOPLE.ID_People (People содержит полную информацию об игроке, такие как, имя, фамилия, рейтинг, логин, пароль и т.д.)
GAMES.ID_P2  INTEGER Черные - ссылка на значение PEOPLE.ID_People

Собственно вопрос. Как получить в результате запроса select два столбца, содержащих имена игроков из таблицы People (People.Name), соответствующие определенной партии (строка в Games)? Короче говоря имена противников.

Моих знаний в SQL хватило только на это:
SELECT NAME, SURNAME, RATING, STATUSS.DESCRIP, RESULTS.DESCRIP, TYPESGAMES.DESCRIP, GAMES.TIMEGAME, GAMES.INCR
FROM GAMES, TYPESGAMES, STATUSS, PEOPLE, RESULTS
WHERE
  (
     (
        (GAMES.ID_P1 = PEOPLE.ID_PEOPLE)
     or
        (GAMES.ID_P2 = PEOPLE.ID_PEOPLE)
     )
  and
     (GAMES.STATUS = STATUSS.ID_STATUS)
  and
     (GAMES.TYPEGAME = TYPESGAMES.ID_TYPESGAME)
  and
     (GAMES.RESULT = RESULTS.ID_RESULT)
  )


Результат:
NAME SURNAME RATING DESCRIP DESCRIP1 DESCRIP2
TIMEGAME INCR
Андрей Иванов              1600 вызов  блиц
5 5
Павел Сергеевич 1782 вызов  блиц
5 5
sasha sash        2000 вызов  блиц
5 0
Петр Андреевич 2110 вызов  блиц
5 0
Павел Сергеевич 1782 вызов  блиц
5 0
Марина Бородина 1900 вызов  блиц
5 0

В таблице Games три строки.


Жумабек   (2006-03-23 14:14:00) [1]

Удалено модератором


xayam   (2006-03-18 16:56:00) [2]

Окончательный вариант:
SELECT p1.NAME, p1.SURNAME, p1.RATING,
      p2.NAME, p2.SURNAME,  p2.RATING,
      STATUSS.DESCRIP, RESULTS.DESCRIP, TYPESGAMES.DESCRIP,
      GAMES.TIMEGAME, GAMES.INCR
FROM GAMES, TYPESGAMES, STATUSS, PEOPLE p1, PEOPLE p2, RESULTS
WHERE
  (  GAMES.ID_P1 = p1.ID_PEOPLE
  and
     GAMES.ID_P2 = p2.ID_PEOPLE
  and
     GAMES.STATUS = STATUSS.ID_STATUS
  and
     GAMES.TYPEGAME = TYPESGAMES.ID_TYPESGAME
  and
     GAMES.RESULT = RESULTS.ID_RESULT
  )


Спасибо vovnuke


xayam   (2006-03-18 16:48:00) [3]

О! Это уже ближе к истине, щас подкорректирую


vovnuke   (2006-03-18 16:43:00) [4]

Извиняюсь, за ошибку (не правильно понял связи), вот так:
select games.p1, games.p2
from games, people p1, people p2
where games.p1 = p1.p and games.p2 = p2.p


xayam   (2006-03-18 16:43:00) [5]

Кстати он такой же как у меня только OR на AND поменять


xayam   (2006-03-18 16:35:00) [6]


> vovnuke ©

На твой запрос - результат пустой


vovnuke   (2006-03-18 16:32:00) [7]

я не знаю как насчет IB6.x, но вообще в SQL это то, как я хочу назвать это поле


xayam   (2006-03-18 16:29:00) [8]


> atruhin ©   (18.03.06 16:18) [8]

А ты все прочитал?))


xayam   (2006-03-18 16:19:00) [9]


> vovnuke ©   (18.03.06 16:13) [7]

А что такое as?


atruhin   (2006-03-18 16:18:00) [10]

Ты так и не ответил, что тебу нужно получить, что не устраивает в том что ты получил?


vovnuke   (2006-03-18 16:13:00) [11]

select t1.p1 as t1p1, t2.p2 as t2p2
from games t1, games t2, people
where t1.p1 = people.p and t2.p2 = people.p


xayam   (2006-03-18 16:10:00) [12]


> PS. Ты не мог получить такой результат, т.к. кол-во запрашиваемых
> полей не соответствует кол-ву показанных тобой.

Точнее в результате одно поле содержит пустое значение (Result), поскольку игра еще не началась - это только "вызов"


xayam   (2006-03-18 16:05:00) [13]


> Что не устраивает то?

Нужно что то типа этого:
Name1 Rating1 Name2 Rating2 TIMEGAME INCR
Андрей 1600    Павел  1782         5          5          ...


xayam   (2006-03-18 16:00:00) [14]


> atruhin ©   (18.03.06 15:54) [2]

Как это? Ровно 8


xayam   (2006-03-18 15:59:00) [15]

А вроде псевдонимы, это когда в разныхтаблицах поля с одинаковыми именами, а у меня в одной таблице (People.Name)


atruhin   (2006-03-18 15:54:00) [16]

Ну и в чем вопрос? Получил и хорошо! Что не устраивает то?
PS. Ты не мог получить такой результат, т.к. кол-во запрашиваемых полей не соответствует кол-ву показанных тобой.


vovnuke   (2006-03-18 15:51:00) [17]

псевдонимы таблиц


Наверх

Титульная страница Поиск, карта сайта Написать письмо