看看类似的问题,我实际上想要的恰恰相反:从一列中获取两个字段中的数据的SQL查询
我有一张表与配对用户的会议:
A_user_id | B_user_id
1 2
3 4
还有一个用户表。
有没有一个简单的mysql查询将所有的user_id都列在一个长列表中?
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)
)
谢谢!
UPDATE(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-不确定我需要什么样的连接。(没有最后一行"按顺序"(我得到的名单只有2人(应该有4人,因为有2对人在开会(。它似乎只从并集的每个部分提取第一个项。我相信这与我为每个连接所做的类型有关,但不确定。因此,用户是不同的(会议表中只有一个用户,它只与用户表中的一个用户匹配(,但位置不是(两个用户在一个位置开会,我认为当我加入位置时,会把事情搞砸(。
2-我如何使用末尾的"orderby"来按"location_id"的结果列表排序,因为现在我有两个命名表要处理。
谢谢!
更新2:
好的,我把这两个选择放在括号里,然后UNIONed,现在我可以按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"字段上的locations.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
select A_user_id as id from meetings
union
select B_user_id as id from meetings
在示例代码中,您可以使用"or",但如果您理解我的意思,"or"必须连接两个"in"语句。
select *
from user
where
(
(user.id in (select A_user_id from meeting))
or
(user.id in ((select B_user_id from meeting))
)
为了回答你的第二次更新,你想要类似的东西
select locations.* from
(
(select A_user_id as id from meeting)
union
(select B_user_id as id from meeting)
) as UIDS
join
locations on locations.id = UIDS.id
select A_user_id as user_id from meetings
union all
select B_user_id as user_idfrom meetings
order by user_id
注:
- UNION ALL保留重复项,UNION不保留
- 任何ORDER BY都位于UNION的末尾