Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Два вторичных ключа в одной таблице / 6 сообщений из 6, страница 1 из 1
26.05.2017, 07:03
    #39460082
DemonOfFuture
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два вторичных ключа в одной таблице
Добрый день!
Столкнулся с небольшой проблемой, не могу догадаться как решить - очень нужен ваш совет.
К примеру, есть таблица "Магазины":

[ ID | Магазин ]

и есть таблица "Обмен"

[ ID | Магазин1 | Магазин2 ]

Столбцы Магазин1 и Магазин2 - соответственно вторично-ключевые. И оба берут значения из таблицы "Магазины".
Проблема заключается в том, что надо составить запрос на вывод данных из таблицы "Обмен" в юзер-френдли виде, то есть чтобы отображались наименования магазинов, а не их коды.
Через INNER JOIN не особо полулчается
Код: sql
1.
SELECT Обмен.ID, Магазины.Магазин, Магазины.Магазин FROM Обмен INNER JOIN Магазины ON Обмен.Магазин1=Магазины.ID AND Обмен.Магазин2=Магазины.ID


Не получается также через неявное слияние
Код: sql
1.
SELECT Обмен.ID, Магазины.Магазин, Магазины.Магазин FROM Обмен, Магазины WHERE Обмен.Магазин1=Магазины.ID and  Обмен.Магазин2=Магазины.ID



Я не большой спец в SQL, редко сталкиваюсь, а время ограничено. Буду рад любым конструктивным комментариям.
...
Рейтинг: 0 / 0
26.05.2017, 08:31
    #39460108
fraks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два вторичных ключа в одной таблице
DemonOfFuture,

Тебе нужно приджойнить к обменам справочник магазинов 2 раза, для этого нужны алиасы.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
select
  М1.Магазин,
  М2.Магазин

from Обмен
  left join Магазин М1 on М1.ID = Обмен.Магазин1
  left join Магазин М2 on М2.ID = Обмен.Магазин2



Не знаю в чем ты пишешь запросы, и как на самом деле у тебя объявлены но русские буквы должны быть в кавычках.
Кроме того конкретно задалбывает при написании запроса постоянно переключаться рус/лат да еще кавычить...
...
Рейтинг: 0 / 0
26.05.2017, 08:39
    #39460110
fraks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два вторичных ключа в одной таблице
Как-то так бы именовал:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
-- Таблицы

CREATE TABLE SHOP (
ID   INTEGER NOT NULL,
NAME VARCHAR(100)
);

ALTER TABLE SHOP ADD CONSTRAINT SHOP_PK PRIMARY KEY (ID);


CREATE TABLE SHOP_EXCHANGE (
IDSHOP1 INTEGER,
IDSHOP2 INTEGER
);

ALTER TABLE SHOP_EXCHANGE ADD CONSTRAINT SHOP_EXCHANGE_FK_IDSHOP1 FOREIGN KEY (IDSHOP1) REFERENCES SHOP(ID);
ALTER TABLE SHOP_EXCHANGE ADD CONSTRAINT SHOP_EXCHANGE_FK_IDSHOP2 FOREIGN KEY (IDSHOP2) REFERENCES SHOP(ID);




Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
-- Запрос

select
  SHOP1.NAME as SHOP1_NAME,
  SHOP2.NAME as SHOP2_NAME

from SHOP_EXCHANGE
  left join SHOP SHOP1 on (SHOP1.id = SHOP_EXCHANGE.IDSHOP1)
  left join SHOP SHOP2 on (SHOP2.id = SHOP_EXCHANGE.IDSHOP2)
...
Рейтинг: 0 / 0
26.05.2017, 09:10
    #39460133
DemonOfFuture
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два вторичных ключа в одной таблице
fraks,

Немного поизучал алиасы и составил корректный запрос - всё получилось именно так, как и требовалось. Спасибо большое!
...
Рейтинг: 0 / 0
26.05.2017, 09:26
    #39460146
akrush
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два вторичных ключа в одной таблице
fraksНе знаю в чем ты пишешь запросы, и как на самом деле у тебя объявлены но русские буквы должны быть в кавычках.
Кроме того конкретно задалбывает при написании запроса постоянно переключаться рус/лат да еще кавычить...

Если русские имена были даны не для наглядности, а действительно используются - это MS Access
Только теперь не понятно - почему вопрос в ветку ФБ
...
Рейтинг: 0 / 0
26.05.2017, 10:30
    #39460220
DemonOfFuture
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Два вторичных ключа в одной таблице
akrush,

русские имена сделаны для наглядности. Структура самой базы сложная и нелогичная, чтобы ее можно было описать в двух словах. БД Firebird, поэтому сюда и зашел.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Два вторичных ключа в одной таблице / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]