我不知道我的代码错误在哪里。 我想一起加入三张桌子。
我有三张桌子
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_type
,roll
,page
这个我的查询是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
谢谢......
答案 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
为了将来参考,撰写查询时应显示子句的顺序为:
select
join
where
group by
having
order by
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