加入三个表

时间:2014-07-09 07:20:39

标签: sql database

我不知道我的代码错误在哪里。 我想一起加入三张桌子。

我有三张桌子

USER_TYPE

id_user_type(pk) | user_type

user_type_page_access

id_user_type(fk) | id_page_access(fk)

page_access

id_page_access(pk) | page | roll

我想要选择id_user_typerollpage

这个我的查询是Sql

CREATE PROCEDURE dbo.FindRollOfUser
(
@id_user_type int
)
as
select 
u1.id_user_type,
p.page,
p.roll 
from user_type as u1 
where u1.id_user_type=@id_user_type
join user_type_page_access as u2
on u1.id_user_type=u2.id_user_type
join page_access as p
on p.id_page_access=u2.id_page_access
RETURN
谢谢......

2 个答案:

答案 0 :(得分:3)

您的问题是因为您在where之前指定了join子句。交换订单,你应该没事:

select 
u1.id_user_type,
p.page,
p.roll 
from user_type as u1 
join user_type_page_access as u2
on u1.id_user_type=u2.id_user_type
join page_access as p
on p.id_page_access=u2.id_page_access
where u1.id_user_type=@id_user_type

为了将来参考,撰写查询时应显示子句的顺序为:

  1. select
  2. join
  3. where
  4. group by
  5. having
  6. order by
  7. DBMS对这些条款的评估顺序并非如上所述。

答案 1 :(得分:1)

以前的SQL很好但是基于表名我觉得添加一些连接类型会更好:

 select 
 u1.id_user_type,
 p.page,
 p.roll 
 from user_type as u1 
 left join user_type_page_access as u2
 on u1.id_user_type=u2.id_user_type
 left join page_access as p
 on p.id_page_access=u2.id_page_access
 where u1.id_user_type=@id_user_type