Mysql объединить несколько таблиц с одной выбранной фразой

0

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');

SQL Fiddle

Мне нужно сделать комбинацию этих 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
  • 2
    конечный результат - объединение select1, select2, select3? если это так, оператор UNION должен сделать здесь трюк ..
  • 0
    Каковы ожидаемые выходные поля? 3 или 5 кол?
Показать ещё 1 комментарий
Теги:
select
join

1 ответ

1
Лучший ответ
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;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню