Глядя на похожие вопросы, я на самом деле хочу прямо противоположное этому: SQL-запрос для получения данных в двух полях из одного столбца
У меня есть таблица собраний с парными пользователями:
A_user_id | B_user_id
1 2
3 4
Существует также таблица user .
Существует ли простой запрос mysql, в котором перечислены all user_ids в один длинный список?
query result
1
2
3
4
Я думал, что-то вроде этого, но это не работает:
select *
from user
where user.id in (
(select A_user_id from meeting)
or
(select B_user_id from meeting)
)
Спасибо!
ОБНОВЛЕНИЕ (UNION решил это, но давайте сделаем это немного сложнее):
Я хочу получить список имен пользователей и имен местоположений (оба являются ссылочными таблицами), поэтому мне нужно присоединить к ним этот объединенный запрос.Вот что я попробовал:
select u1.fname, l1.name
from meeting m1
join user u1 on m1.A_user_id=u1.id
join locations l1 on m1.location_id=l1.id
union
select u2.fname, l2.name
from meeting m2
join user u2 on m2.A_user_id=u2.id
join locations l2 on m2.location_id=l2.id
order by location_id asc
Я получаю две ошибки:
1 - Не уверен, какие типы объединений мне нужны для этих.(без последней строки 'order by') Я получаю список только из 2 (должно быть 4, так как встречаются 2 пары людей).Кажется, он извлекает только первый элемент из каждой части союза.Я считаю, что это относится к типу объединения, которое я делаю для каждого, но не уверен.Таким образом, пользователи различаются (в таблице собраний присутствует только 1 пользователь, а в таблице пользователей он соответствует только 1 пользователю), но местоположения нет (2 пользователя встречаются в 1 месте, и я думаю, что когда я присоединяюсь к местоположениям, эточто-то не так).
2- Как использовать в конце «order by» для упорядочения по результирующему списку «location_id», поскольку теперь у меня есть две именованные таблицы для работы.
Спасибо!
ОБНОВЛЕНИЕ 2:
Хорошо, я поместил два выбора в скобки и ОБЪЕДИНЯЛ их, и теперь я могу сделать заказ по location_id ... ноЯ до сих пор не знаю, как присоединиться к таблице местоположений.Mysql не нравится то, что я пробовал
(select u1.fname, m1.location_id
from meeting m1
join user u1 on m1.A_user_id=u1.id)
union
(select u2.fname, m2.location_id
from meeting m2
join user u2 on m2.B_user_id=u2.id)
#join locations l on l.id = location_id // this line messes things up *
order by location_id asc
- Разве не должен быть всеобъемлющий выбор всего этого?Как мне присоединиться к полю location.id в поле location_id, которое выводится из запроса объединения?Поскольку поле "location_id" технически находится в двух разных таблицах?При соединении выше выдается ошибка.
ОБНОВЛЕНИЕ 3: решено
Вот мой последний запрос:
select tb1.fname, l.name
from (
(select u1.fname, m1.location_id
from meeting m1
join user u1 on m1.A_user_id=u1.id)
union
(select u2.fname, m2.location_id
from meeting m2
join user u2 on m2.B_user_id=u2.id)
) tb1
join locations l on l.id = tb1.location_id
order by location_id asc