MySQL оставил соединение с несколькими представлениями - PullRequest
4 голосов
/ 03 декабря 2011

У меня есть следующий запрос, который я разработал для компиляции данных из ряда представлений на основе данных клиента.

SELECT 
  vw_clients.client_id, 
  name, 
  exts, 
  vms, 
  ivrs, 
  queues, 
  conf10, 
  conf20, 
  conf30
FROM 
  vw_clients, 
  vw_exts, 
  vw_vms, 
  vw_ivrs, 
  vw_queues, 
  vw_conf10, 
  vw_conf20, 
  vw_conf30
WHERE 
  vw_clients.client_id = vw_exts.client_id AND 
  vw_clients.client_id = vw_vms.client_id AND 
  vw_clients.client_id = vw_ivrs.client_id AND 
  vw_clients.client_id = vw_queues.client_id AND
  vw_clients.client_id = vw_conf10.client_id AND
  vw_clients.client_id = vw_conf20.client_id AND
  vw_clients.client_id = vw_conf30.client_id;

Запрос работает нормально, если в каждом представлении есть записи, относящиеся к записям в vw_clients.Однако мне нужно изменить это, чтобы использовать левое соединение, чтобы оно возвращало все записи из vm_clients и только те из других представлений, которые имеют записи для этих клиентов.

Я читал о левых соединениях, но в большинстве случаев я нашел только информацию о присоединении к одной или, может быть, двум таблицам - но мне нужно объединиться 8. Я делаю левое соединение на vw_clients.client_id с соответствующимполе client_id во всех видах?Какой синтаксис для этого?

Буду благодарен за любую помощь.Я очень близок к решению этой проблемы, и я думаю, что это последний кусок головоломки!

Большое спасибо.

Ответы [ 2 ]

7 голосов
/ 03 декабря 2011

Вы можете использовать левое соединение, поместив vw_clients первым в списке from, затем все остальные таблицы, следующие за левым соединением. Левое объединение может объединять только две таблицы или один «набор результатов» и таблицу, где набор результатов является результатом предыдущего объединения.

В вашем случае:

SELECT 
    T0.client_id, name, exts, vms, ivrs, queues, conf10, conf20, conf30
FROM 
    vw_clients T0
    left join  vw_exts T1 on T0.client_Id=T1.client_id
    Left join  vw_vms T2 on ...
    ...
Where ...

Может быть, здесь вам не нужно, где пункт.

0 голосов
/ 03 декабря 2011

Да, вы просто замените WHERE на LEFT JOIN.

LEFT JOIN vw_exts ON vw_clients.client_id = vw_exts.client_id

Затем вы можете удалить эти дополнительные таблицы из части FROM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...