sql запрос < несколько FK на одну и туже таблицу

Pagrimuha
Дата: 18.06.2012 12:04:01
Google подходящих ответов не дал, может не правильно вопрос задаю...
Суть в том, что необходимо объединить одну таблицу, в которой имеется несколько внешних на др. таблицу, с этой самой др. таблицей. Ну например табл. SUPPLY(id, title) и MOVEMENT(supply_id1, value1, supply_id2, value2).
Подскажите пожалуйста как объединить эти таблицы с помощью join?
Сейчас я делаю это так:
select 
movement.supply_id1,
(select supply.title from supply where supply.id = movement.suooly_id1) as supply_title1,
movement.value1,
movement.supply_id2,
(select supply.title from supply where supply.id = movement.suooly_id1) as supply_title2,
movement.value2
from movement

Понимаю что это не эффективно с ростом кол-ва записей в искомой таблице, но хотелось бы как-то так:
select
movement.supply_id1,
supply.title as supply_title1,
movement.value1,
movement.supply_id2,
supply.title as supply_title2,
movement.value2
from movement
join supply(и какое-то равенство???)
kdv
Дата: 18.06.2012 12:08:47
научись использовать алиасы таблиц.

тебе нужен обычный join, явный или не явный, но supply 2 раза.
select ...
from movement m, supply sp1, supply sp2
where m.supply_id1 = sp1.id and m.supply_id2 = sp2.id

дальше, если нужны все supply, независимо от movement, используешь left join, и т.д.
Dimitry Sibiryakov
Дата: 18.06.2012 12:10:39

Pagrimuha
Подскажите пожалуйста как объединить эти таблицы с помощью join?

Просто используй в запросе таблицу SUPPLY несколько раз с разными алиасами.

Posted via ActualForum NNTP Server 1.5

Pagrimuha
Дата: 18.06.2012 12:10:56
kdv
научись использовать алиасы таблиц.

тебе нужен обычный join, явный или не явный, но supply 2 раза.
select ...
from movement m, supply sp1, supply sp2
where m.supply_id1 = sp1.id and m.supply_id2 = sp2.id

дальше, если нужны все supply, независимо от movement, используешь left join, и т.д.


спасибо, буду знать что искать.
Pagrimuha
Дата: 18.06.2012 12:22:33
помогло, сделал так:
select 
movement.supply_id1,
s1.title as supply_title1,
movement.value1,
movement.supply_id2,
s2.title as supply_title2,
movement.value2
from movement
left join supply s1 on s1.id = movement.supply_id1
left join supply s2 on s2.id = movement.supply_id2

всем спасибо за помощь.
olegenty
Дата: 18.06.2012 18:12:54
я бы ещё "movement" на просто "m" заменил - от этого смотрибельность повышается.
kdv
Дата: 18.06.2012 18:33:28
Pagrimuha
помогло, сделал так:

если вы указываете алиас у одной из таблиц, привыкайте ВСЕМ ОСТАЛЬНЫМ таблицам также назначать алиасы.
В запросе алиасы либо должны быть у всех таблиц, либо ни у одной.
Ivan_Pisarevsky
Дата: 19.06.2012 12:25:25
Пишу алиасы практически всегда, даже когда таблица одна, ибо ленив я. Клац алиас, точечку и эксперт уже подсуетился с автодополнением, еще пару буковок и остается только жмакнуть энтер. :) Особливо помогает на малознакомой базе, опечаток меньше.