SQL: объединить несколько таблиц

0

Я пытаюсь присоединиться к следующим таблицам:

  • Таблица 1: пользователи (id, name)
  • Таблица 2: pivot_table (user_id, user_id2)

В этой таблице содержатся отношения между пользователями. Один пользователь может быть связан со многими другими пользователями.

  • Таблица 3: контакты (id, user_id, name)

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

Я использовал следующий запрос:

select
    contacts.id as contact_id,
    users.id as user_id,
    pivot.user_id2 as user2_id
from
    'contacts'
    inner join 'users' on  'contacts'.'user_id' = 'users'.'id'
    inner join 'pivot' as 'pivot' on 'pivot'.'user_id' = 'contacts'.'user_id'

Предположим, что у меня есть следующие данные в таблицах

Пользователи:

id   name
1    Sahil
2    Shubham
3    Xyz

Данные сводной таблицы

user_id   user_id2
1         2

Данные таблицы контактов

id   user_id   name
1    1         Abc
2    1         XYZ

Теперь, что получается из запроса,

contact_id   user_id   user_id2
1            1         2
2            1         2

но мне нужно

contact_id   user_id   user_id2
1            1         null
2            1         null
null         1         2

Я не могу понять, что я делаю неправильно.

Спасибо

  • 1
    Ваш синтаксис INNER JOIN неверен, между операторами JOIN нет AND , поэтому удалите часть and после user_id = users.id . Также вам не нужно оборачивать каждый идентификатор в кавычки.
  • 0
    о, извините, я использовал построитель запросов и собрал этот sql из него и забыл удалить AND из запроса.
Показать ещё 6 комментариев
Теги:
join

4 ответа

0

Я решил проблему самостоятельно с помощью Союза, чтобы получить желаемые результаты.

Спасибо за вашу поддержку.

0

Кажется, вы хотите, чтобы запрос показывал несвязанные данные:

  1. пользовательские контакты
  2. пользователи, связанные с пользователем

Я бы предложил два отдельных запроса для этого. Если вы хотите сделать это в одном запросе, используйте UNION ALL для объединения двух результатов запроса:

select contact_id, user_id, null as user_id2 from contacts
union all
select null as contact_id, user_id, user_id2 from pivot_table;
0

Попробуйте это вместо этого:

SELECT  B.id as contact_id, A.id as user_id, C.user_id2 as
user2_id
FROM 'users' A LEFT JOIN 'contacts' B
ON A.'id'=B.'user_id' LEFT JOIN 'pivot' C
ON A.'id'=C.'user_id';

См. MySQL Join Made Easy для понимания использования соединений.

  • 0
    Тем не менее результат тот же
  • 0
    Попробуйте еще раз, я только что обновил свой ответ.
Показать ещё 2 комментария
0
SELECT users.id,GROUP_CONCAT(contacts.user_id,pivot.user_id SEPERATOR ",")contacts.user_id,pivot.user_id
FROM contacts INNER JOIN users ON contacts.user_id=users.id INNER JOIN pivot ON users.id=pivot.user_id;
  • 0
    извините, но вы полностью упустили пункты, которые я упомянул. Мне нужно присоединиться к contacts.user_id, а не contacts.id
  • 0
    вы можете изменить contacts.id с помощью contacts.user_id
Показать ещё 4 комментария

Ещё вопросы

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