То, что у вас есть, работает нормально, если ваши данные согласованы.Вот версия вашей базы данных и запрос, который демонстрирует это.Для простоты я сделал вывод о существовании таблиц b
и c
и превратил различные столбцы в таблицах стиля X_Y
во внешние ключи для однобуквенных таблиц.
CREATE TABLE a
(
id INTEGER NOT NULL PRIMARY KEY,
info VARCHAR(20) NOT NULL
);
CREATE TABLE b
(
id INTEGER NOT NULL PRIMARY KEY,
data VARCHAR(20) NOT NULL
);
CREATE TABLE C
(
id INTEGER NOT NULL PRIMARY KEY,
extra VARCHAR(20) NOT NULL
);
CREATE TABLE d
(
id INTEGER NOT NULL PRIMARY KEY,
value VARCHAR(20) NOT NULL
);
CREATE TABLE a_b
(
a_id INTEGER NOT NULL REFERENCES a,
b_id INTEGER NOT NULL REFERENCES b,
PRIMARY KEY (a_id, b_id)
);
CREATE TABLE b_c
(
b_id INTEGER NOT NULL REFERENCES b,
c_id INTEGER NOT NULL REFERENCES C,
PRIMARY KEY(b_id, c_id)
);
CREATE TABLE c_d
(
c_id INTEGER NOT NULL REFERENCES C,
d_id INTEGER NOT NULL REFERENCES d,
PRIMARY KEY(c_id, d_id)
);
INSERT INTO a VALUES(1, "Quasimodo");
INSERT INTO b VALUES(20, "Quiet");
INSERT INTO C VALUES(333, "Contemporaneous");
INSERT INTO d VALUES(4444, "true");
INSERT INTO a_b VALUES(1, 20);
INSERT INTO b_c VALUES(20, 333);
INSERT INTO c_d VALUES(333, 4444);
SELECT *
FROM a
JOIN a_b ON a_b.a_id = a.id
JOIN b_c ON b_c.b_id = a_b.b_id
JOIN c_d ON c_d.c_id = b_c.c_id
JOIN d ON d.id = c_d.d_id
WHERE d.value = "true";
Для заданных данных, которые дают:
1 Quasimodo 1 20 20 333 333 4444 4444 true
Таким образом, если данные верны, построенный вами запрос может дать ответ.Однако, если вы получили пустую таблицу по вашему неполному запросу, то в ваших таблицах есть проблема с данными - или (не случайно) ваша схема схемы ввела нас в заблуждение.
Тестирование выполнено наMac под управлением MacOS High Sierra 10.13.4, использующий Informix 12.10.FC6, но использующий то, что считается подмножеством SQL, общим для Informix и MySQL.