Я бил головой о кирпичную стену, пытаясь заставить это работать, и я не знаю, почему это не так.MySQL, соединяющий таблицы, дает неожиданный результат
Я присоединяюсь к таблицам A и B, используя my_field. Затем я запускаю дополнительный запрос, чтобы получить my_field из таблицы B , где complete = 1. Это то, что я хочу использовать для запроса таблицы C и D
Это мой текущий запрос
SELECT
table_A.*,
table_B.*,
table_C.*,
table_D.*
FROM table_A
INNER JOIN table_B ON
table_A.my_field = table_B.my_field
LEFT JOIN (SELECT my_field FROM table_B WHERE complete ='1') test ON
table_B.my_field = test.my_field
RIGHT JOIN table_C ON
test.my_field = table_C.my_field
INNER JOIN table_D ON
table_C.my_field = table_D.my_field
Это выход из текущего запроса
table_A.field1 | table_A.field2 | table_B.field1 | table_B.field2 | table_C.field1 | table_C.field2 | table_D.field1 | table_D.field2 | test.complete
=============================================================================================================================================================================
something | something | something | something | something | something | something | something | 1
null | null | null | null | something | something | something | something | 0
и это то, что я хочу чтобы получить
table_A.field1 | table_A.field2 | table_B.field1 | table_B.field2 | table_C.field1 | table_C.field2 | table_D.field1 | table_D.field2 | test.complete
=============================================================================================================================================================================
something | something | something | something | something | something | something | something | 1
something | something | something | something | null | null | null | null | 0
UPDATE:
Вот структуры таблиц. Я удалил столбцы, которые не привязаны к какой-либо другой таблице.
CREATE TABLE IF NOT EXISTS `table_A` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`code` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `code` (`code`)
);
CREATE TABLE IF NOT EXISTS `table_B` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`code` varchar(255) NOT NULL,
`complete` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
);
CREATE TABLE IF NOT EXISTS `table_C` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`code` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `code` (`code`)
);
CREATE TABLE IF NOT EXISTS `table_D` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`code` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
);
'Левый Join' и' правой Join' в том же запросе болит голова ... – Siyual
Я почти уверен, если вы используете запоминающиеся соглашения об именах вещей, было бы лучше .. почему бы не использовать фрукты и продукты или автомобили или что-то еще. generic names tire me – Coffee
, что точка этого кода? :: 'LEFT JOIN (SELECT my_field FROM table_B WHERE complete = '1') test ON table_B.my_field = test.my_field' -> почему вы делаете все это – Coffee