http://sqlfiddle.com/#!9/708aef/8/0
У меня есть таблица, называемая mmsusbribers, где я храню информацию от пользователей. Затем у меня есть еще 3 таблицы: driftinfo_subscriber_operator_lookup, driftinfo_subscriber_reseller_lookup и driftinfo_subscriber_server_lookup. Я хочу объединить все таблицы вместе в одном из них. Таблицы выглядят так:
CREATE TABLE IF NOT EXISTS 'mmsubscribers' (
'id' int(11) NOT NULL,
'email' varchar(50) DEFAULT NULL,
'name' varchar(50) DEFAULT NULL,
'hash' varchar(100) DEFAULT NULL,
'status' varchar(50) DEFAULT NULL,
'listid' int(11) DEFAULT NULL,
'phone' varchar(50) DEFAULT NULL,
'login' varchar(50) DEFAULT NULL,
'pass' varchar(50) DEFAULT NULL,
'language' varchar(50) DEFAULT NULL,
'orgname' varchar(75) DEFAULT NULL,
'orgadmin' int(11) DEFAULT NULL,
'domain' varchar(150) DEFAULT NULL,
'organizationId' int(11) DEFAULT NULL,
'number' varchar(15) DEFAULT NULL,
'department' varchar(50) DEFAULT NULL,
'server' varchar(20) DEFAULT NULL,
'reseller' varchar(75) DEFAULT NULL,
'operators' varchar(50) DEFAULT NULL,
'subscriber_type' int(11) DEFAULT NULL
) ENGINE=InnoDB AUTO_INCREMENT=166629 DEFAULT CHARSET=utf8;
INSERT INTO 'mmsubscribers' ('id', 'email', 'name', 'hash', 'status',
'listid', 'phone', 'login', 'pass', 'language', 'orgname', 'orgadmin',
'domain', 'organizationId', 'number', 'department', 'server', 'reseller',
'operators', 'subscriber_type') VALUES
(13, '[email protected]', 'Nils Nissesson', NULL, 'inactive', 2, '+4612312313',
'user1', 'user1', 'SV', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Reseller1',
NULL, NULL),
(15, '[email protected]', 'Nils Karlsson', 'b5q8gelmyvp4gu9sgntgvzkha0u', 'active', 2, '+47741741109874', NULL, NULL, 'EN', '', NULL, NULL, NULL, NULL, NULL, '', '', '', NULL),
(17, '[email protected]', 'Test Karlsson', 'mdpte4uhkvqzew4n2megoa4qk7k', 'active', 2, '+4482798273798', NULL, NULL, 'SV', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(18, '[email protected]', 'Herr Vincze', 'mhw81k96liwlfj8lkyvu2rdr9y', 'inactive', 2, '', NULL, NULL, 'SV', '', NULL, '', NULL, '', '', '', '', '', NULL),
(146996, '[email protected]', 'Nils Dolk', 'dd07c78e2fa7487b283f6c4dbff7ec0fc448a4', 'active', 3, '', NULL, NULL, '', 'Test', 1, 'nils.se', 6721, '468123123454', 'Sälj', '185.XX.124.162', 'Reseller56', 'STH-UNO', 4),
(149277, '[email protected]', 'Bo Holgersson', 'c557202473aef551d410a00d2b1be3075e8d7e1fe', 'active', 3, '', NULL, NULL, '', 'Test', 1, 'bo.se', 6578, '4653643232436', 'Företagsförsäljning', '185.39.124.154', 'Reseller1', 'STB-uno', 4),
(149824, '[email protected]', 'testar', '9c5f161459236d5d216c48a47d0c2aecf1', 'active', 3, '', NULL, NULL, '', 'Test', 1, 'bo.se', 6578, '4654170399', '', '185.XX.124.162', 'Reseller1', 'Tele2', 4);
Первая таблица, я хочу присоединиться к:
CREATE TABLE IF NOT EXISTS 'driftinfo_subscriber_operator_lookup' (
'id' int(11) NOT NULL,
'drifinfo_problem_id' int(11) DEFAULT NULL,
'operator' varchar(75) DEFAULT NULL
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
--
-- Dumpning av Data i tabell 'driftinfo_subscriber_operator_lookup'
--
INSERT INTO 'driftinfo_subscriber_operator_lookup' ('id', 'drifinfo_problem_id', 'operator') VALUES
(1, 4, 'Weblink'),
(4, 10, 'Tele2');
Вторая таблица:
CREATE TABLE IF NOT EXISTS 'driftinfo_subscriber_reseller_lookup' (
'id' int(11) NOT NULL,
'drifinfo_problem_id' int(11) DEFAULT NULL,
'reseller' varchar(75) DEFAULT NULL
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
--
-- Dumpning av Data i tabell 'driftinfo_subscriber_reseller_lookup'
--
INSERT INTO 'driftinfo_subscriber_reseller_lookup' ('id', 'drifinfo_problem_id', 'reseller') VALUES
(1, 4, 'Reseller1'),
(2, 4, 'Reseller2'),
(5, 10, 'Reseller3'),
(6, 10, 'BestReseller'),
(7, 10, 'BadReseller');
Третья таблица:
CREATE TABLE IF NOT EXISTS 'driftinfo_subscriber_server_lookup' (
'id' int(11) NOT NULL,
'drifinfo_problem_id' int(11) DEFAULT NULL,
'server' varchar(50) DEFAULT NULL
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
--
-- Dumpning av Data i tabell 'driftinfo_subscriber_server_lookup'
--
INSERT INTO 'driftinfo_subscriber_server_lookup' ('id', 'drifinfo_problem_id', 'server') VALUES
(1, 4, '185.XX.124.162'),
(8, 10, '172.XX.129.20'),
(9, 10, '172.XX.129.21');
Моя последняя таблица:
CREATE TABLE IF NOT EXISTS 'driftinfo_problem' (
'id' int(11) NOT NULL,
'active' varchar(11) DEFAULT NULL,
'date' date DEFAULT NULL,
'omrade' varchar(75) DEFAULT NULL,
'soluno_staging_message' varchar(750) DEFAULT NULL,
'heading' varchar(100) DEFAULT NULL,
'ingress' varchar(750) DEFAULT NULL,
'image' varchar(1500) DEFAULT NULL,
'text' varchar(3000) DEFAULT NULL,
'beskrivning' varchar(250) DEFAULT NULL,
'user_owner' varchar(75) DEFAULT NULL,
'estimate_finished_date' date DEFAULT NULL,
'language' varchar(50) DEFAULT NULL,
'time' time DEFAULT NULL,
'estimate_finished_time' time DEFAULT NULL
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
--
-- Dumpning av Data i tabell 'driftinfo_problem'
--
INSERT INTO 'driftinfo_problem' ('id', 'active', 'date', 'omrade', 'soluno_staging_message', 'heading', 'ingress', 'image', 'text', 'beskrivning', 'user_owner', 'estimate_finished_date', 'language', 'time', 'estimate_finished_time') VALUES
(2, 'No', '2018-04-18', 'Test Problem', NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2018-04-18', NULL, '09:04:00', '16:00:00'),
(3, 'No', '2018-04-27', 'Operatör tysta samtal', NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2018-04-27', NULL, '11:35:00', '14:30:00'),
(4, 'No', '2018-05-16', 'Operator driftstörning', NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2018-05-16', NULL, '11:20:00', '14:00:00'),
(5, 'No', '2018-05-17', 'Operator driftstörning', NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2018-05-17', NULL, '14:30:00', '17:00:00'),
(6, 'No', '2018-05-18', 'Internet problem', NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2018-05-18', NULL, '16:00:00', '18:00:00'),
(7, 'No', '2018-05-25', 'Operator driftstörning', NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2018-05-25', NULL, '14:30:00', '17:00:00'),
(8, 'No', '2018-05-28', 'Operator routing problem', NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2018-05-29', NULL, '16:00:00', '12:00:00'),
(10, 'Yes', '2018-05-31', 'Operator Business störning', NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2018-05-31', NULL, '10:00:00', '14:00:00');
Мне нужно сделать комбинацию этих 3 выборок в 1 выбор, если это возможно.
Оператор Select1:
SELECT
mmsubscribers.email,
driftinfo_problem.active,
driftinfo_problem.id,
mmsubscribers.reseller,
mmsubscribers.operators,
mmsubscribers.server
FROM mmsubscribers
INNER JOIN driftinfo_subscriber_operator_lookup ON mmsubscribers.operators = driftinfo_subscriber_operator_lookup.'operator'
INNER JOIN driftinfo_problem ON driftinfo_subscriber_operator_lookup.drifinfo_problem_id = driftinfo_problem.id
WHERE driftinfo_problem.active = 'Yes'
Select2 реселлер:
SELECT
mmsubscribers.email,
driftinfo_problem.active,
driftinfo_problem.id,
mmsubscribers.reseller,
mmsubscribers.operators,
mmsubscribers.server
FROM mmsubscribers
INNER JOIN driftinfo_subscriber_reseller_lookup ON mmsubscribers.reseller = driftinfo_subscriber_reseller_lookup.reseller
INNER JOIN driftinfo_problem ON driftinfo_subscriber_reseller_lookup.drifinfo_problem_id = driftinfo_problem.id
Сервер Select3:
SELECT
mmsubscribers.email,
driftinfo_problem.active,
driftinfo_problem.id,
mmsubscribers.reseller,
mmsubscribers.operators,
mmsubscribers.server
FROM mmsubscribers
INNER JOIN driftinfo_subscriber_server_lookup ON mmsubscribers.server = driftinfo_subscriber_server_lookup.server
INNER JOIN driftinfo_problem ON driftinfo_subscriber_server_lookup.drifinfo_problem_id = driftinfo_problem.id
Ожидаемый результат, который мне нравится:
email active id reseller operators server
[email protected] No 4 Reseller1 (null) (null)
[email protected] No 4 Reseller1 STB-uno 185.39.124.154
[email protected] No 4 Reseller1 Tele2 185.XX.124.162
[email protected] No 4 Reseller56 STH-UNO 185.XX.124.162
[email protected] No 4 Reseller1 Tele2 185.XX.124.162
[email protected] Yes 10 Reseller1 Tele2 185.XX.124.162
SELECT
mmsubscribers.email,
driftinfo_problem.active,
driftinfo_problem.id,
mmsubscribers.reseller,
mmsubscribers.operators,
mmsubscribers.server
FROM mmsubscribers
INNER JOIN driftinfo_subscriber_operator_lookup ON mmsubscribers.operators = driftinfo_subscriber_operator_lookup.'operator'
INNER JOIN driftinfo_problem ON driftinfo_subscriber_operator_lookup.drifinfo_problem_id = driftinfo_problem.id
WHERE driftinfo_problem.active = 'Yes'
union all
SELECT
mmsubscribers.email,
driftinfo_problem.active,
driftinfo_problem.id,
mmsubscribers.reseller,
mmsubscribers.operators,
mmsubscribers.server
FROM mmsubscribers
INNER JOIN driftinfo_subscriber_reseller_lookup ON mmsubscribers.reseller = driftinfo_subscriber_reseller_lookup.reseller
INNER JOIN driftinfo_problem ON driftinfo_subscriber_reseller_lookup.drifinfo_problem_id = driftinfo_problem.id
union all
SELECT
mmsubscribers.email,
driftinfo_problem.active,
driftinfo_problem.id,
mmsubscribers.reseller,
mmsubscribers.operators,
mmsubscribers.server
FROM mmsubscribers
INNER JOIN driftinfo_subscriber_server_lookup ON mmsubscribers.server = driftinfo_subscriber_server_lookup.server
INNER JOIN driftinfo_problem ON driftinfo_subscriber_server_lookup.drifinfo_problem_id = driftinfo_problem.id;