如何从一个表和一个子表中进行选择

时间:2013-04-30 08:14:11

标签: sql sql-server-2008 tsql

我在SQL Server中有类似以下两个表:

Table1
MainID Descrip
     1 tree
     2 dog
     3 blah
     4 etc

Table2
SubID MainID SubDescrip
    1      2 rover
    2      2 fido

我希望能够在具有匹配的MainID时从Table1和Table2中选择所有内容。

我想要的输出如下:

MainID Descrip SubID SubDescrip
     1 tree     NULL       NULL
     2 dog      NULL       NULL
     2 dog         1      rover
     2 dog         2       fido
     3 blah     NULL       NULL
     4 etc      NULL       NULL

我可以使用外连接获得所需输出的第二行以外的所有输出,但是如何获得第二行呢?

换句话说,这个:

SELECT m.MainID, m.Descrip, s.SubID, s.SubDescrip
FROM Table1 m LEFT OUTER JOIN
     Table2 s ON m.MainID = s.MainID
ORDER BY m.MainID, s.SubID

给了我这个:

MainID Descrip SubID SubDescrip
     1 tree     NULL       NULL
     2 dog         1      rover
     2 dog         2       fido
     3 blah     NULL       NULL
     4 etc      NULL       NULL

但我也想要这个:

 2 dog      NULL       NULL

2 个答案:

答案 0 :(得分:6)

使用UNION

SELECT  m.MainID, 
        m.Descrip, 
        s.SubID, 
        s.SubDescrip
FROM    Table1 m 
        LEFT OUTER JOIN Table2 s 
            ON m.MainID = s.MainID
UNION
SELECT  MainID, 
        Descrip, 
        NULL SubID, 
        NULL SubDescrip
FROM    Table1
ORDER   BY MainID, SubID

答案 1 :(得分:2)

您可以使用以下内容:

    SELECT m.MainID, m.Descrip, s.SubID, s.SubDescrip
    FROM Table1 m INNER JOIN
         Table2 s ON m.MainID = s.MainID
    UNION ALL
    SELECT m.MainID, m.Descrip, NULL, NULL
    FROM Table1 m
    ORDER BY MainID, SubID

勒兹