MYSQL выбрать из 3 или более таблиц - PullRequest
0 голосов
/ 18 марта 2011

Мне нужно сделать запрос MySQL для отображения данных из 3 разных таблиц.

Это таблица 1:

TABLE1

  • ID

  • ссылка

  • имя

  • электронная почта

Это таблица 2:

TABLE2:

  • ID

  • телефон

Это таблица 3:

Table3:

  • ID

  • телефон

Мне нужно показать все данные из таблицы1, а также телефон из таблицы2 или таблицы3, только если идентификатор в таблице2 или таблице3 совпадает с номером в поле ссылки в таблице1.

Любой совет? Спасибо!

Ответы [ 5 ]

3 голосов
/ 18 марта 2011

Вы можете попробовать что-то вроде

SELECT  t1.*
        COALESCE(t2.phone,t3.phone) phone
FROM    Table1 t1 LEFT JOIN
        Table2 t2 ON t1.reference = t2.id LEFT JOIN
        Table3 t3 ON t1.reference = t3.id

Взгляните на COALESCE (значение, ...) и, возможно, SQL SERVER - Введение в JOINs - Основы JOINs

2 голосов
/ 18 марта 2011

Да, у меня есть совет, измените вашу структуру.Нет смысла иметь разные таблицы для хранения разных телефонных номеров.Вот что вы можете сделать:

table1( -- you should give it a better name
  id,
  -- reference, -- not needed now...
  name,
  email
);

phone_numbers(
  id,
  table1_id,
  phone
);

Теперь вы можете сделать что-то вроде:

SELECT    table1.*, GROUP_CONCAT(phone) 
FROM      table1 
LEFT JOIN phone_numbers ON table1.id = table1_id
GROUP BY  table1.id, name, email -- , whatever fields you have more on table1
1 голос
/ 18 марта 2011

Вы запросили телефон из таблицы 2 или из таблицы 3.

Поскольку эти 2 таблицы имеют общие столбцы, мы можем упростить все это и рассматривать эти 2 таблицы как одну, используя предложение UNION.:

select table1.*, v.phone
  from table1
  inner join (select * from table2 
              union
             select * from table3) v on v.id = table1.reference

РЕДАКТИРОВАТЬ: исправлены имена таблиц в объединении

0 голосов
/ 18 марта 2011

Я не знаю, можете ли вы сделать оператор CASE в select в mysql, но вы можете попробовать оператор CASE в виде столбца и присоединиться.Вот код sudo.

SELECT  t1.*, CASE t2.phone IS NOT t3.phone THEN t3.phone ELSE t2.phone END CASE as PhoneNumber 
FROM Table1 t1 
LEFT JOIN Table2 t2 ON t1.reference = t2.id 
LEFT JOIN Table3 t3 ON t1.reference = t3.id
0 голосов
/ 18 марта 2011
    SELECT t1.*, t2.*, t3.*
FROM table1 t1 JOIN table2 t2
   ON t1.reference = t2.ID
JOIN table3 t3
   ON t1.reference = t3.ID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...