Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Join по значению поля select / 5 сообщений из 5, страница 1 из 1
01.12.2017, 05:20
    #39562308
Андрей15
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join по значению поля select
Доброго...

есть 3 таблицы, никак не могу сообразить как сделать все одним запросом :(

Individuals
(int)id, (int)address_id,(varchar)table_address,.....
второе поле содержит id таблицы третьего поля (либо id дома, либо id квартиры, т.е. в третьем поле значения flat и house)
и соответсвенно нужно при выборке получить данные либо из таблицы flat по id или из house по id второго поля
...
Рейтинг: 0 / 0
01.12.2017, 21:35
    #39562864
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join по значению поля select
Left join обеих таблиц и Case или Coalesce (тупо не понял задачи, может, и обе)...
...
Рейтинг: 0 / 0
02.12.2017, 02:44
    #39562933
Андрей15
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join по значению поля select
"тупо не понял " (с) ответ (сорри за иронию :) )
ок
таблица для выборки :

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
/*
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for court_rs_registred_on_adrress_individual
-- ----------------------------
DROP TABLE IF EXISTS `court_rs_registred_on_adrress_individual`;
CREATE TABLE `court_rs_registred_on_adrress_individual`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `individual_id` int(11) NOT NULL COMMENT 'id физлица',
  `adrres_id` int(11) NOT NULL id COMMENT 'адреса проживания (квартиры или дома)',
  `adrres_table` bit(1) NOT NULL DEFAULT b'1' COMMENT 'переключатель адреса \'1\' - квартира, \'0\' - частный дом без квартиры',
  `table_id` int(255) NULL DEFAULT NULL COMMENT 'id таблицы: 4 - квартира, 3 дом',
  `lc_id` int(11) NULL DEFAULT NULL COMMENT 'id ЛС',
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `individual_id1`(`individual_id`) USING BTREE,
  CONSTRAINT `individual_id1` FOREIGN KEY (`individual_id`) REFERENCES `court_spr_individual` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB AUTO_INCREMENT = 8206 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

CONSTRAINT `court_rs_registred_on_adrress_individual_ibfk_1` FOREIGN KEY (`individual_id`) REFERENCES `court_spr_individual` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB AUTO_INCREMENT = 8206 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of court_rs_registred_on_adrress_individual
-- ----------------------------
INSERT INTO `court_rs_registred_on_adrress_individual` VALUES (1, 1, '2012-12-01', NULL, 70, b'1', 4, NULL, NULL, NULL, NULL);
INSERT INTO `court_rs_registred_on_adrress_individual` VALUES (2, 2, '2012-12-01', NULL, 73, b'1', 4, NULL, NULL, NULL, NULL);
INSERT INTO `court_rs_registred_on_adrress_individual` VALUES (3, 3, '2013-08-30', NULL, 72, b'1', 4, NULL, NULL, NULL, NULL);
INSERT INTO `court_rs_registred_on_adrress_individual` VALUES (4, 4, '2013-08-30', '2013-09-19', 72, b'1', 4, NULL, NULL, NULL, NULL);
INSERT INTO `court_rs_registred_on_adrress_individual` VALUES (3119, 3119, '2013-10-31', NULL, 178, b'0', 3, NULL, NULL, NULL, NULL);
INSERT INTO `court_rs_registred_on_adrress_individual` VALUES (3120, 3120, '2013-10-31', NULL, 210, b'0', 3, NULL, NULL, NULL, NULL);
INSERT INTO `court_rs_registred_on_adrress_individual` VALUES (3121, 3121, '2013-10-31', NULL, 210, b'0', 3, NULL, NULL, NULL, NULL);

SET FOREIGN_KEY_CHECKS = 1;



2 таблицы выборок для присоединения к первой таблицы в зависимости от значения поля adrres_table (table_id - это у меня "справочник" таблиц) по id:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for court_spr_flat
-- ----------------------------
DROP TABLE IF EXISTS `court_spr_flat`;
CREATE TABLE `court_spr_flat`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `house_id` int(11) NOT NULL COMMENT 'ссылка на id дома',
  `number` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'номер квартиры',
  `s` decimal(6, 2) NULL DEFAULT NULL COMMENT 'площадь',
  `floor` decimal(2, 0) NULL DEFAULT NULL COMMENT 'этаж',
  `cost` decimal(11, 2) NULL DEFAULT NULL COMMENT 'стоимость',
  `date_in_rr` bit(1) NULL DEFAULT b'1' COMMENT 'дата информации Росреестра',
  `text_adress` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'адрес текстом',
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `house_id1`(`house_id`) USING BTREE,
  CONSTRAINT `house_id1` FOREIGN KEY (`house_id`) REFERENCES `court_spr_house` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB AUTO_INCREMENT = 3899 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

DROP TABLE IF EXISTS `court_spr_house`;
CREATE TABLE `court_spr_house`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_street` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'GUID улицы из ФИАС',
  `id_house` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'GUID дома из ФИАС',
  `housenum` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'номер дома',
  `street_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'улица',
  `mir_sud_id` int(11) NULL DEFAULT NULL COMMENT 'id мирового участка',
  `rai_sud_id` int(11) NULL DEFAULT NULL COMMENT 'id районного суда',
  `text_adress` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'адрес текстом',
  `client_id` int(11) NULL DEFAULT NULL COMMENT 'id клиента',
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `mir_sud_id`(`mir_sud_id`) USING BTREE,
  INDEX `rai_sud_id`(`rai_sud_id`) USING BTREE,
  INDEX `client_adress_id`(`client_id`) USING BTREE,
  CONSTRAINT `client_adress_id` FOREIGN KEY (`client_id`) REFERENCES `court_spr_clients` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `mir_sud_id` FOREIGN KEY (`mir_sud_id`) REFERENCES `court_spr_court` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `rai_sud_id` FOREIGN KEY (`rai_sud_id`) REFERENCES `court_spr_court` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB AUTO_INCREMENT = 573 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;



т.е. если учесть пример, то к первым 4 записям должны присоединиться данные из court_spr_flat , а к остальным - из court_spr_house (в общем-то говоря в итоге в первом случае должно быть court_spr_flat+court_spr_flat+court_spr_house...+ФИАС
во втором court_spr_flat+court_spr_house...+ФИАС
...
Рейтинг: 0 / 0
02.12.2017, 23:04
    #39563147
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join по значению поля select
Я счас физически в опе мира, так что DDL мне без пользы. Вот суть:
Код: sql
1.
2.
3.
4.
SELECT t1.id, COALESCE(t2.val, t3.val)
FROM t1
LEFT JOIN t2 ON t1.id=t2.t1_id AND t1.tab=2
LEFT JOIN t3 ON t1.id=t3.t1_id AND t1.tab=3


Дальше додумаешь..
...
Рейтинг: 0 / 0
03.12.2017, 12:16
    #39563233
Андрей15
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Join по значению поля select
Получилось (из моего сообщения) вот так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT
t1.id, t1.adrres_table,t1.adrres_id,
COALESCE(t2.text_adress, t3.text_adress)

FROM
court_rs_registred_on_adrress_individual as t1
LEFT JOIN court_spr_flat as t2 ON t1.adrres_id=t2.id AND t1.table_id=4
LEFT JOIN court_spr_house as t3 ON t1.adrres_id=t3.id AND t1.table_id=3
WHERE t1.id in (1,2,3,4,3119,3120,3121)



остальное додумаю :) спасисбо
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Join по значению поля select / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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