![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с 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]псевдонимы таблиц