sql交叉连接和内连接在一起

时间:2013-12-27 18:42:58

标签: sql

我搜索了互联网,但我找不到cross joininner 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

1 个答案:

答案 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;