У меня есть 3 таблицы, каждая из которых имеет всего 2 строки. T1 (идентификатор, имя), T2 (идентификатор, адрес электронной почты), T3 (идентификатор, телефон). T1 имеет регистрацию как на id1, так и на id2, T2 имеет регистрацию только на id1, на id2 нет регистрации (null) по электронной почте. T3 имеет регистрацию как для id1, так и для id2. Я хочу присоединиться к T1, T2 и T3 с некоторыми условиями (имя типа «% etc%»). Результатом должна быть таблица с (имя, адрес электронной почты, телефон), но если регистрация в одной из объединенных таблиц равна NULL (ex T2 id2 (email) равно NULL), я хочу, чтобы результат был таблицей только (name , телефон) (T1 + T3, потому что T2 имеет нулевую регистрацию при id2) ... какой-то вид на нескольких внутренних соединениях, если столбец имеет регистрацию не NULL. Спасибо.mysql присоедините несколько таблиц, если есть какая-либо регистрация
ответ
Я думаю, вы должны посмотреть в использовании LEFT JOINs
:
SELECT T1.Name, T2.Email, T3.Phone
FROM T1
LEFT JOIN T2 ON T1.id=T2.id
LEFT JOIN T3 ON T1.id=T3.id
Это вернет все записи из таблицы T1, а только тех, которые удовлетворяют от Т2 и Т3. Другие поля будут NULL.
Если же вы хотите только те, которые соответствуют критериям, а затем использовать внутренние соединения вместо:
SELECT T1.Name, T2.Email, T3.Phone
FROM T1
INNER JOIN T2 ON T1.id=T2.id
INNER JOIN T3 ON T1.id=T3.id
Это будет возвращать только нужные записи.
Комментарий, который вы сделали только о возврате 2 столбцов, если одна запись NULL - я не думаю, что это подход, который вы хотите принять. Верните все свои столбцы и обработайте это на стороне презентации. Если вам действительно нужны динамические столбцы, вам нужно будет изучить Dynamic SQL.
--EDIT--
Динамический SQL подход:
SET @id = 2;
SET @sql = NULL;
SELECT
CONCAT(
CASE WHEN EMail IS NOT NULL THEN 'Email' ELSE '' END,
CASE WHEN EMail IS NOT NULL AND Phone IS NOT NULL THEN ',' ELSE '' END,
CASE WHEN Phone IS NOT NULL THEN 'Phone' ELSE '' END)
INTO @sql
FROM T1
LEFT JOIN T2 ON T1.id=T2.id
LEFT JOIN T3 ON T1.id=T3.id
WHERE T1.Id = @id;
SET @sql = CONCAT('SELECT Name, ', @sql, '
FROM T1
LEFT JOIN T2 ON T1.id=T2.id
LEFT JOIN T3 ON T1.id=T3.id
WHERE T1.Id = ',@id);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
* ... но если регистрация в одной из объединенных таблиц равна NULL (ex T2 id2 (email) равно NULL), я хочу, чтобы результат был только таблицей (имя, телефон) (T1 + T3, поскольку T2 имеет нулевая регистрация в id2) ... * - как это может возвратить два столбца, например? – Ambrose
@MachoPaay - хороший момент, не совсем понял, о чем спрашивал OP. Я опубликую правку о возврате разных столбцов. – sgeddes
в любом случае ваш ответ кажется прекрасным, поскольку вы не можете динамически возвращать неравный столбец за выполнение, если только OP не создаст динамический sql. – Ambrose
- 1. присоедините несколько таблиц с определенной строкой
- 2. MySQL - Присоедините запрос данных из нескольких таблиц
- 3. MySQL триггер, если несколько таблиц
- 4. Слева присоедините несколько таблиц, если внешний ключ не равен нулю - оптимизация mysql
- 5. Mysql: Регистрация/Относительно двух таблиц
- 6. MYSQL Регистрация таблиц с не уникальным идентификатором на несколько столбцов
- 7. MySQL - присоедините две таблицы
- 8. Mysql несколько таблиц выберите
- 9. Mysql несколько таблиц
- 10. вывода MYSQL несколько таблиц
- 11. MySQL Несколько таблиц Ссылка
- 12. MVC Issue: Регистрация формы, несколько таблиц
- 13. MySql Если Left Регистрация Trouble
- 14. MySQL Несколько таблиц Присоединиться
- 15. Laravel 5.2 Регистрация, вставка в несколько таблиц
- 16. Несколько таблиц Mysql JOIN
- 17. Mysql paginate несколько таблиц
- 18. Выберите несколько таблиц MySQL
- 19. MySQL: JOIN несколько таблиц
- 20. MySQL: выберите несколько таблиц
- 21. несколько таблиц MySQL запросов
- 22. MySQL - Регистрация запросов из тех же таблиц
- 23. Регистрация нескольких вторичных таблиц
- 24. MySql: Несколько левых Регистрация дает неправильный вывод
- 25. MySQL - JOIN Operation Несколько таблиц
- 26. Как запросить Mysql несколько таблиц
- 27. Обновление нескольких таблиц Регистрация
- 28. MySQL-запросы на несколько таблиц
- 29. MySQL несколько таблиц и несколько строк
- 30. MySQL: Расчесывание несколько таблиц поиска
Пожалуйста, покажите, что вы пробовали. – SilentAssassin