如何在SQL服务器中交叉连接两个表

问题描述:

HI 我有一个表EMP_SCHED,其中包含EMP_ID的COMMENTS列和另一个表SHIFT,它还包含EMP_ID.Now的COMMENTS列,对于给定的日期范围,我需要从两个表中选择COMMNETS桌子。如何在SQL服务器中交叉连接两个表

例如,在我有EMP_SCHED表7个EMP_IDs和2个EMPIDs移位。我需要的所有EMPIDS和COMMNETNS和地方共同EMPID意见从两个表中单列

我想到的地方加入第一在EMP_SCHED然后SHIFT但他们返回了多行

SELECT distinct E.[EMP_ID]as SCHED_EMP,S.EMP_ID as SHIFT_EMP, 
      E.[SCHED_COMMENT],S.COMMENTS  
    FROM [EMP_SCHED_COMMENT] E, SHIFT S 
    where e.emp_id =*s.emp_id 

输出看上去

NULL 33018 NULL Truck Delivery 
NULL 33029 NULL Order Beer/Wine 
NULL 33067 NULL Deli Shift Available 
NULL 33115 NULL Clean backroom 
NULL 34232 NULL ccccc 
34020 34020  kkkkkk 
34020 34020  looo 

我在这里干什么是否正确? 用于当另外MY SQL SERVER是不允许的关键字LFET RIGHT加入

(其中一个条件预计在上下文指定的非布尔类型的表达式,邻近“左”)

第一得到鲜明ID列表

SELECT DISTINCT EMP_ID 
FROM EMP_SCHED 
UNION 
SELECT DISTINCT EMP_ID 
FROM SHIFT 

然后链接原始表。

如何不使用左连接?

此作品在SQL Server 2005

DECLARE @Employee TABLE(
     EmpID INT, 
     Comment VARCHAR(MAX) 
) 

DECLARE @Shift TABLE(
     Emp_ID INT, 
     Comment VARCHAR(MAX) 
) 

INSERT INTO @Employee (EmpID,Comment) SELECT 1, 'Emp1' 
INSERT INTO @Employee (EmpID,Comment) SELECT 2, 'Emp2' 
INSERT INTO @Employee (EmpID,Comment) SELECT 3, 'Emp3' 

INSERT INTO @Shift (Emp_ID,Comment) SELECT 2, 'Shift2' 
INSERT INTO @Shift (Emp_ID,Comment) SELECT 3, 'Shift3' 
INSERT INTO @Shift (Emp_ID,Comment) SELECT 4, 'Shift4' 

SELECT * 
FROM (
      SELECT DISTINCT 
        EmpID 
      FROM @Employee 
      UNION 
      SELECT DISTINCT 
        Emp_ID 
      FROM @Shift 
     ) EmpIDs LEFT JOIN 
     @Employee e ON EmpIDs.EmpID = e.EmpID LEFT JOIN 
     @Shift s ON EmpIDs.EmpID = s.Emp_ID 
+0

我已经使用过,但如果列名是difernet两种情况会怎么样。我的casse中发生了什么是它从我的第一张表中挑选值 – GustyWind 2009-07-23 11:12:55

SELECT EMP_SCHED.COMMENTS, SHIFT.COMMENTS 
FROM EMP_SCHED LEFT OUTER JOIN SHIFT ON 
EMP_SCHED.EMP_ID = SHIFT.EMP_ID 
WHERE 
[(YOUR DATE RANGE FILTER)] 

在跨SQL Server的语法连接是TABLE1 CROSS JOIN TABLE2 ..

和左连接是INFACT LEFT OUTER JOIN和RIGHT OUTER JOIN是正确的外部加入。我不确定LEFT和/或RIGHT是否是正确的语法。

+0

从您的问题我看不到您需要交叉连接。 – 2009-07-23 11:17:21