2017-10-04 58 views
0

我有两个表用户事件。 要写入的查询是找到谁举办活动我必须编写一个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“不?如何决定何时使用子查询或联接?

+1

我在这两个查询之间唯一的区别是第一个如果用户注册了多个事件,则会包含重复项。另外,你应该停止使用隐式'join'语法('from'子句中的',')。这是不符合ANSI-92标准(从1992年开始......超过25年前...),并且这种类型的连接并不完全支持。 – Siyual

+0

'JOIN'相当于一个***相关的***子查询。你的**不是**。 –

+2

你需要解释你的意思是“工作正常,但查询1不”。你是什​​么意思,它不起作用? – gview

回答

-3

第二个查询不起作用,因为列名称不匹配。你有一个说,“身份证件(选择organiser_id”如果你这样做,它会工作,“身份证件(选择organiser_id为ID”

1

MySQL的一个典型的连接语法是:

select distinct user.name 
from user 
join events ON events.organiser_id = user.id 
order by user.name; 
+0

当然,如果这是你想要的。 – gview

0
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