Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > СУБД, общие вопросы > SQL Query


Автор: Вася К. 12.9.2005, 12:16
Здраствуйте!

Есть 3 таблицы:

table1
TYPE_ID Integer,
TYPE_NAME Varchar (10)

table2
ITEM_ID Integer,
TYPE_ID Integer,
TYPE_NAME varchar (20)

table3
ID Integer,
ITEM_ID Integer.


Поле table2.TYPE_ID связано с table1.TYPE_ID.

Надо выбрать table1.TYPE_NAME, table2.ITEM_NAME из таблицы table3, где table3.ITEM_ID = table2.ITEM_ID.

Как это осуществить?

Спасибо!

Автор: LSD 12.9.2005, 12:35
Код
select t1.type_name, t2.item_name 
    from table1 t1, table2 t2, table3 t3
    where t3.item_id = t2.item_id and t1.id = t2.type_id

Автор: Akina 12.9.2005, 12:42
Каким соотношением связаны таблицы 1 и 2?
Таблицы 2 и 3 связаны или нет? если не связаны, возможны ли отсутствия соответствия, и как они должны обрабатываться?

Если ТОЧНО по вопросу, то
Код

select table1.type_name, table2.item_name 
    from table1 join table2 on table1.type_id = table2.type_id, table3
    where table3.item_id = table2.item_id


LSD
Ты не учитываешь связи таблиц - возможны ошибки и артефакты

Автор: Вася К. 12.9.2005, 13:08
tabel1.type_id и table2.type_id имеюь связь один ко многим, тоже самое table3.item_id и table2.item_id

Автор: Akina 12.9.2005, 13:25
С учетом дополнения вопрос лишен смысла. Таблица 3 по условию вообще не участвует в выборке.

Кстати, в таблице 2 не вижу поля ITEM_NAME ... ну допущу что TYPE_NAME varchar (20) на самом деле и есть ITEM_NAME

А если в лоб, то

Код

SELECT table1.TYPE_NAME, table2.ITEM_NAME
FROM table3 INNER JOIN (table1 INNER JOIN table2 ON table1.TYPE_ID = table2.TYPE_ID) ON table3.ITEM_ID = table2.ITEM_ID;


Однако этот запрос (и его результат) полностью эквивалентен

Код

SELECT table1.TYPE_NAME, table2.ITEM_NAME
FROM table1 INNER JOIN table2 ON table1.TYPE_ID = table2.TYPE_ID;


но работать будет быстрее

Автор: Вася К. 13.9.2005, 08:44
Цитата(Akina @ 12.9.2005, 13:25)
С учетом дополнения вопрос лишен смысла. Таблица 3 по условию вообще не участвует в выборке.

Нет, таблица 3 участвует в выборке, поскольку надо выбрать те записи из table2 , чьи ITEM_ID присутствуют в table3.ITEM_ID

Автор: Akina 13.9.2005, 14:24
Цитата
таблица 3 участвует в выборке, поскольку надо выбрать те записи из table2 , чьи ITEM_ID присутствуют в table3.ITEM_ID
тогда однозначно
Код
SELECT table1.TYPE_NAME, table2.ITEM_NAME
FROM table3 INNER JOIN (table1 INNER JOIN table2 ON table1.TYPE_ID = table2.TYPE_ID) ON table3.ITEM_ID = table2.ITEM_ID;
smile и почему всегда инфу надо клещами вытаскивать...

Автор: Вася К. 13.9.2005, 15:24
Цитата

и почему всегда инфу надо клещами вытаскивать...


Если честно, я только задним умом догадывался, что мне нужно, но именно благодаря обсуждению темы я прозрел! smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)