Есть три таблицы (сотрудники, должности и должности сотрудников):
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