Модераторы: Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SELECT QUERY 
:(
    Опции темы
Вася К.
Дата 11.10.2005, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 9.2.2005

Репутация: нет
Всего: нет



Здраствуйте!

Имееются 3 таблицы:

OBJECTS:
id integer,
name varchar (10)

SECTIONS
id integer,
name varchar (10)

MOVEMENT
from_obj integer,
from_sec integer,
to_obj integer,
to_sec integer


OBJECTS.id связаны с MOVEMENT.from_obj и MOVEMENT.to_obj, аналогично и таблица SECTIONS связана с таблицей MOVEMENT. Как составить запрос выборки из таблицы MOVEMENT, чтоб получился результат в следующем виде:

OBJECTS.NAME (FROM), SECTIONS.NAME (FROM), OBJECTS.NAME (TO), SECTIONS.NAME (TO)


Спасибо!
--------------------
Да здраствует ОПТИМИЗМ!
PM MAIL YIM   Вверх
Darhazer
Дата 11.10.2005, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 28.9.2005
Где: HellCity (Sofia, Bulgaria)

Репутация: нет
Всего: 29



Чтото у тебя в таблици нету... например id в MOVEMENT
Если хочеш получить для всех movements from...to то:

Код
 SELECT movements.id, objects.name AS toobject, sections.name as tosection, f.fromobject, f.fromsection
FROM objects, sections, movements, 

  (SELECT movements.id, objects.name AS fromobject, sections.name as fromsection
  FROM objects, sections, movement
  WHERE objects.id = movements. from_obj AND sections.id = movements.from_sec) f

WHERE objects.id = movements. to_obj AND sections.id = movements.to_sec AND movements.id = f.id


Конечно, надо пригодить для синтаксиса твоей БД

Да и не пробувал код, так что можеть имет ошибок

Это сообщение отредактировал(а) Darhazer - 11.10.2005, 10:32


--------------------
I'm a wheel, I'm a wheel, I can roll, I can feel
But you can't stop me turning
'Cause I'm the sun, I'm the sun, I can move, I can run
But you'll never stom me burning
PM MAIL WWW ICQ YIM   Вверх
Вася К.
Дата 11.10.2005, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 9.2.2005

Репутация: нет
Всего: нет



Если честно, идею не понял..... Поэтому и ошибку в коде найти не смогу. smile
А join - ами это не решить?
--------------------
Да здраствует ОПТИМИЗМ!
PM MAIL YIM   Вверх
Darhazer
Дата 11.10.2005, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 28.9.2005
Где: HellCity (Sofia, Bulgaria)

Репутация: нет
Всего: 29



Ну здесь именно неявние join-и

В принципе пишу для PostgreSQL, так что не гарантирую совместимост SQL-а, но принцип такой.

Делаеш запрос

Код
SELECT movements.id, objects.name AS fromobject, sections.name as fromsection
  FROM objects, sections, movement
  WHERE objects.id = movements. from_obj AND sections.id = movements.from_sec


Резултать: Таблица с полям id, fromobject, fromsection
Этой таблици даеш имя f и пользуеш в другом запроса:

Код
SELECT movements.id, objects.name AS toobject, sections.name as tosection, f.fromobject, f.fromsection
FROM objects, sections, movements,  f
WHERE objects.id = movements. to_obj AND sections.id = movements.to_sec AND movements.id = f.id


Так понятнее?

Это сообщение отредактировал(а) Darhazer - 11.10.2005, 11:01


--------------------
I'm a wheel, I'm a wheel, I can roll, I can feel
But you can't stop me turning
'Cause I'm the sun, I'm the sun, I can move, I can run
But you'll never stom me burning
PM MAIL WWW ICQ YIM   Вверх
Вася К.
Дата 11.10.2005, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 9.2.2005

Репутация: нет
Всего: нет



Чего-то не работает. Ругается на

Код

(SELECT movements.id, objects.name AS fromobject, sections.name as fromsection
  FROM objects, sections, movement
  WHERE objects.id = movements. from_obj AND sections.id = movements.from_sec) f


Говорит, странная штука, этот SELECT на такой-то строке smile . Наверно, нельзя так объявлять таблицу в Interbase 6.5.
--------------------
Да здраствует ОПТИМИЗМ!
PM MAIL YIM   Вверх
Darhazer
Дата 11.10.2005, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 28.9.2005
Где: HellCity (Sofia, Bulgaria)

Репутация: нет
Всего: 29



Ок, попробуем по другому:

Код
SELECT movements.id, objects.name AS toobject, sections.name as tosection, f.name AS fromname, f2.name AS fromsection
FROM objects, sections, movements,  objects f, sections f2,
WHERE objects.id = movements.to_obj AND sections.id = movements.to_sec AND f.id = movements.from_obj AND f2.name = movements.from_sec


Это сообщение отредактировал(а) Darhazer - 11.10.2005, 11:26


--------------------
I'm a wheel, I'm a wheel, I can roll, I can feel
But you can't stop me turning
'Cause I'm the sun, I'm the sun, I can move, I can run
But you'll never stom me burning
PM MAIL WWW ICQ YIM   Вверх
Вася К.
Дата 11.10.2005, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 9.2.2005

Репутация: нет
Всего: нет



Цитата

Ок, попробуем по другому:


SELECT movements.id, objects.name AS toobject, sections.name as tosection, f.name AS fromname, f2.name AS fromsection
FROM objects, sections, movements,  objects f, sections f2,
WHERE objects.id = movements.to_obj AND sections.id = movements.to_sec AND f.id = movements.from_obj AND f2.name = movements.from_sec

- Результат - ни одной записи smile

А почему вот этот код неправильно работает? Логически, помоему, правильно ....

Код

SELECT 
  MOVEMENT.ID,
  OBJECTS.OBJ_NAME,
  SECTIONS.SEC_NAME,
  OBJECTS1.OBJ_NAME,
  SECTIONS1.SEC_NAME
FROM  MOVEMENT
 LEFT JOIN OBJECTS ON (MOVEMENT.ID_FROM_OBJ=OBJECTS.ID)
 LEFT JOIN SECTIONS ON (MOVEMENT.ID_FROM_SEC=SECTIONS.ID)
 LEFT JOIN OBJECTS OBJECTS1 ON (MOVEMENT.ID_TO_OBJ=OBJECTS1.ID)
 LEFT JOIN SECTIONS SECTIONS1 ON (MOVEMENT.ID_TO_SEC=SECTIONS1.ID)



Собсвенно, если бы этот элементарный запрос работал, проблема была бы решена smile
--------------------
Да здраствует ОПТИМИЗМ!
PM MAIL YIM   Вверх
Darhazer
Дата 11.10.2005, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 28.9.2005
Где: HellCity (Sofia, Bulgaria)

Репутация: нет
Всего: 29



Цитата
Результат - ни одной записи smile

Конечно не работаеть, в условие вставил .name вместо .id smile

Вот так должен сработать:
Код

 SELECT movements.id, objects.name AS toobject, sections.name as tosection, f.name AS fromname, f2.name AS fromsection
FROM objects, sections, movements,  objects f, sections f2,
WHERE objects.id = movements.to_obj AND sections.id = movements.to_sec AND f.id = movements.from_obj AND f2.id = movements.from_sec



--------------------
I'm a wheel, I'm a wheel, I can roll, I can feel
But you can't stop me turning
'Cause I'm the sun, I'm the sun, I can move, I can run
But you'll never stom me burning
PM MAIL WWW ICQ YIM   Вверх
Вася К.
Дата 11.10.2005, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 9.2.2005

Репутация: нет
Всего: нет



Усе, иду стреляться. Не работает. Ничего не работает. Целый день коту под хвост.
--------------------
Да здраствует ОПТИМИЗМ!
PM MAIL YIM   Вверх
Alex
Дата 11.10.2005, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 7
Всего: 162



Код проверен и 100% рабочий:
Код

select
    o1.name
  , s1.name
  , o2.name
  , s2.name
from movement mv
left join objects  o1 on mv.from_obj = o1.id
left join objects  o2 on mv.to_obj   = o2.id
left join sections s1 on mv.from_sec = s1.id
left join sections s2 on mv.to_sec   = s2.id


Если не работает, то смотри данные и связи в базе
Добавлено @ 16:39
Код

CREATE TABLE OBJECTS (
    ID    INTEGER NOT NULL,
    NAME  VARCHAR(10)
);

ALTER TABLE OBJECTS ADD CONSTRAINT PK_OBJECTS PRIMARY KEY (ID);

CREATE TABLE SECTIONS (
    ID    INTEGER NOT NULL,
    NAME  VARCHAR(10)
);

ALTER TABLE SECTIONS ADD CONSTRAINT PK_SECTIONS PRIMARY KEY (ID);

CREATE TABLE MOVEMENT (
    ID        INTEGER NOT NULL,
    FROM_OBJ  INTEGER,
    FROM_SEC  INTEGER,
    TO_OBJ    INTEGER,
    TO_SEC    INTEGER
);

ALTER TABLE MOVEMENT ADD CONSTRAINT PK_MOVEMENT PRIMARY KEY (ID);

ALTER TABLE MOVEMENT ADD CONSTRAINT FK_MOVEMENT_FROM_OBJ FOREIGN KEY (FROM_OBJ) REFERENCES OBJECTS (ID) ON UPDATE CASCADE;
ALTER TABLE MOVEMENT ADD CONSTRAINT FK_MOVEMENT_FROM_SEC FOREIGN KEY (FROM_SEC) REFERENCES SECTIONS (ID) ON UPDATE CASCADE;
ALTER TABLE MOVEMENT ADD CONSTRAINT FK_MOVEMENT_TO_OBJ FOREIGN KEY (TO_OBJ) REFERENCES OBJECTS (ID) ON UPDATE CASCADE;
ALTER TABLE MOVEMENT ADD CONSTRAINT FK_MOVEMENT_TO_SEC FOREIGN KEY (TO_SEC) REFERENCES SECTIONS (ID) ON UPDATE CASCADE;



--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.0501 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.