我搜索了互联网,但我找不到cross join
和inner join
的任意组合。
请帮帮我......
我有三张桌子。
1) dbo.Dates
2) dbo.UsersCa
3) dbo.InfoCa
我需要将这些表格组合起来,以显示用户每天所做的事情。
如果dbo.InfoCa表中没有条目,则必须显示null。
我尝试了以下代码,但它无效。请帮帮....
SELECT dbo.UsersCa.PMP ,
dbo.UsersCa.UsName ,
dbo.UsersCa.UsSurname ,
dbo.UsersCa.[Position] ,
dbo.Dates.DateCA ,
NULL ,
NULL ,
NULL
FROM dbo.UsersCa
CROSS JOIN dbo.Dates
UNION ALL
SELECT dbo.UsersCa.PMP ,
dbo.UsersCa.UsName ,
dbo.UsersCa.UsSurname ,
dbo.UsersCa.[Position] ,
NULL ,
dbo.InfoCa.IDUser ,
dbo.InfoCa.IDCa ,
dbo.InfoCa.Description
FROM dbo.UsersCa ,
dbo.Dates
INNER JOIN dbo.InfoCa ON dbo.Dates.DateCA = dbo.InfoCa.DateField
答案 0 :(得分:0)
我认为您想要的查询在left outer join
之后使用cross join
。
cross join
获取用户和天数的所有组合。 left outer join
然后引入每用户日信息:
SELECT u.PMP, u.UsName, u.UsSurname, u.[Position], d.DateCA,
ic.IDUser, ic.IDCa, ic.Description
FROM dbo.UsersCa u cross join
dbo.Dates d left outer join
dbo.InfoCa ic
ON d.DateCA = ic.DateField and
d.IDUser = ic.IdUser;