-Поиск по дневнику

Поиск сообщений в rss_sql_ru_access_programming

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 16.03.2006
Записей:
Комментариев:
Написано: 4


Чудеса после добавления foreign key

Пятница, 13 Июня 2014 г. 23:36 + в цитатник
Есть три таблицы (сотрудники, должности и должности сотрудников):

CREATE TABLE ppersons(Код COUNTER,name_ VARCHAR (255));
CREATE TABLE ppositions(Код COUNTER, position_ VARCHAR (255));
CREATE TABLE ppersons_positions(
Код COUNTER,
person_id INTEGER,
position_id INTEGER,
order_date DATETIME);
CREATE UNIQUE INDEX PrimaryKey ON ppositions (Код);
CREATE UNIQUE INDEX PrimaryKey ON ppersons (Код);
CREATE UNIQUE INDEX PrimaryKey ON ppersons_positions (Код);

INSERT INTO ppersons (name_) VALUES ('Вася');
INSERT INTO ppersons (name_) VALUES ('Петя');
INSERT INTO ppersons (name_) VALUES ('Семен');

INSERT INTO ppositions (position_) VALUES ('Менеджер');
INSERT INTO ppositions (position_) VALUES ('Кассир');
INSERT INTO ppositions (position_) VALUES ('Охранник');

INSERT INTO ppersons_positions (person_id, position_id, order_date) VALUES (1, 1, '2013-06-14');
INSERT INTO ppersons_positions (person_id, position_id, order_date) VALUES (1, 2, '2014-06-11');
INSERT INTO ppersons_positions (person_id, position_id, order_date) VALUES (2, 2, '2005-06-03');
INSERT INTO ppersons_positions (person_id, position_id, order_date) VALUES (2, 1, '2011-04-09');
INSERT INTO ppersons_positions (person_id, position_id, order_date) VALUES (3, 3, '2014-06-11');

Далее выполняю запрос, чтобы найти сотрудников и их последнюю должность:

SELECT ppersons.[Код] as id, ppositions.position_ FROM
(((ppersons LEFT join (select person_id, max(order_date) as oDate from ppersons_positions group by person_id) AS T1 ON T1.person_id=ppersons.[Код])
LEFT JOIN ppersons_positions ON (ppersons_positions.person_id=T1.person_id AND ppersons_positions.order_date=T1.oDate)) LEFT JOIN ppositions
ON ppositions.[Код]=ppersons_positions.position_id) where NOT position_ IS NULL AND position_ in ('Кассир','Менеджер','Охранник')


Получаю ожидаемый результат:

id position_
-- ---------
1 Кассир
2 Менеджер
3 Охранник

Затем добавляю foreign key:
ALTER TABLE ppersons_positions ADD CONSTRAINT ppersonsppersons_positions
FOREIGN KEY (person_id) REFERENCES ppersons(Код)


Снова выполняю тот же запрос и...

id position_
-- ---------
1 Кассир

Убираю foreign key:
ALTER TABLE ppersons_positions DROP CONSTRAINT ppersonsppersons_positions


И снова всё нормально. Что это за фигня? Прошу помощи!

http://www.sql.ru/forum/1100135/chudesa-posle-dobavleniya-foreign-key


 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку