我必须编写一个MySql查询来查找已组织事件的用户姓名的排序顺序
问题描述:
我有两个表用户和事件。 要写入的查询是找到谁举办活动我必须编写一个MySql查询来查找已组织事件的用户姓名的排序顺序
查询1用户名:
select user.name
from user, events
where user.id = events.organiser_id
order by user.name;
查询2:
select name
from user
where id in(select organiser_id from events)
order by name;
那为什么“查询2”正常但是“查询1“不?如何决定何时使用子查询或联接?
答
第二个查询不起作用,因为列名称不匹配。你有一个说,“身份证件(选择organiser_id”如果你这样做,它会工作,“身份证件(选择organiser_id为ID”
答
MySQL的一个典型的连接语法是:
select distinct user.name
from user
join events ON events.organiser_id = user.id
order by user.name;
+0
当然,如果这是你想要的。 – gview
答
SELECT DISTINCT
U.Name
FROM USER U
LEFT JOIN
EVENTS E
ON U.id = E.organiser_id
WHERE E.organiser_id IS NOT NULL
ORDER BY U.Name
使用JOIN选择所有用户和相关事件,然后使用WHERE过滤以排除那些没有链接的用户(事件表中的ID);如果事件表中的每个用户有更多事件,那么必须使用DISTINCT(这在T-SQL中)
+0
问题标记为mysql – gview
我在这两个查询之间唯一的区别是第一个如果用户注册了多个事件,则会包含重复项。另外,你应该停止使用隐式'join'语法('from'子句中的',')。这是不符合ANSI-92标准(从1992年开始......超过25年前...),并且这种类型的连接并不完全支持。 – Siyual
'JOIN'相当于一个***相关的***子查询。你的**不是**。 –
你需要解释你的意思是“工作正常,但查询1不”。你是什么意思,它不起作用? – gview