看看类似的问题,我实际上想要与此完全相反: SQL query for getting data in two fields from one column
我与配对用户有一个会议表:
A_user_id | B_user_id
1 2
3 4
还有一个用户表。
是否有一个简单的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-如何使用结果列表中的“location_id”按顺序使用“order by”,因为现在我有两个命名表要处理。
谢谢!
更新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
更新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
答案 0 :(得分:1)
select A_user_id as id from meetings
union
select B_user_id as id from meetings
在您的示例代码中,您可以使用'或',但是'或'必须加入两个'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
答案 1 :(得分:1)
select A_user_id as user_id from meetings
union all
select B_user_id as user_idfrom meetings
order by user_id
注意: