我有两张桌子 - 一张名为“朋友”和其他“事件”。
表friends
包含id
,user_id
和friend_id
表events
包含id
,user_id
和title_event
我在“活动”中注册了六个活动:我的第二个,第二个和第二个是另一个朋友的朋友。
什么查询会在“朋友”表格中回复我的朋友以及我的事件和朋友的事件?
我正在使用下面的查询,它只返回朋友的事件。如何更改它以返回我的活动和我的朋友?
查询:
SELECT *
FROM (
SELECT a.user_id, a.friend_id
FROM tb_friend a
WHERE a.user_id = 1
) friends,
tb_events e
WHERE e.user_id = friends.friend_id;
答案 0 :(得分:0)
这是你要找的吗?
SELECT *
FROM (
SELECT a.user_id, a.friend_id
FROM tb_friend a
WHERE a.user_id = 1
) friends,
tb_events e
WHERE e.user_id = friends.friend_id OR e.user_id = 1;
我在这里做的唯一更改是添加OR e.user_id = 1
,这应该让MySQL在结果集中包含您自己的事件。
答案 1 :(得分:0)
您遇到的问题是没有原始“User_ID = 1”的条目,只有朋友...... Daan提供的示例使用的WHERE子句显然仍然不适合您。我建议您的内部查询是一个UNION,将您和您的朋友包含在一个结果中......这样,您就有一个合格的列表...如果这仍然不起作用,则通过显示一些没有实际名称的示例数据(因为无论如何,你所有的样本基本都是ID,没有什么特别的隐藏),它可以帮助其他人更好地提供解决方案。如果您不能灵活地提供此类样本数据,那么您从此处和未来获得的答案可能会非常有限......
SELECT *
FROM
( select 1 as User_ID
UNION
SELECT a.friend_id AS User_ID
FROM tb_friend a
WHERE a.user_id = 1
) QualifiedPeople
join tb_events e
on QualifiedPeople.User_ID = e.User_ID
现在,如果你只想要不同的事件,不要做一张显示所有人的外卡,因为参加同一事件的多个人实际上会为每个人显示该事件,并且可以显示你的8对6记录。 ..再次,没有看到样本数据,没有人可以诚实地回答它。
SELECT distinct e.id, e.title_event
FROM ... same rest of query from above