表连接比较并使用该比较创建新列

时间:2012-05-24 15:38:17

标签: sql sql-server database join

我有2个表... table1和table2。

我想显示table1

中的所有序列号

table2中也有序列号

我想比较table1中的序列号和table2

然后我想在table1中显示所有序列号,如果序列号在table1中则为第二列,如果不是

则为第二列

这可能与sql语句有关,还是我必须构建一个单独的表?我正在运行sql-server。

3 个答案:

答案 0 :(得分:2)

如果每个表中的序列号都是唯一的,那么您可以使用:

SELECT  Table1.SerialNumber,
        CASE WHEN Table2.SerialNumber IS NULL THEN 'No' ELSE 'Yes' END AS [IsInTable2]
FROM    Table1.SerialNumber
        LEFT JOIN Table2
            ON Table2.SerialNumber = Table1.SerialNumber

如果一个或两个表中有Duplicates,则以下任何一个都可以使用:

SELECT  DISTINCT 
        Table1.SerialNumber,
        COALESCE([IsInTable2], 'No') [IsInTable2]
FROM    Table1.SerialNumber
        OUTER APPLY
        (   SELECT  TOP 1 'Yes' [IsInTable2]
            FROM    Table2
            WHERE   Table2.SerialNumber = Table1.SerialNumber
        ) Table2


SELECT  DISTINCT
        Table1.SerialNumber,
        CASE WHEN Table2.SerialNumber IS NULL THEN 'No' ELSE 'Yes' END [IsInTable2]
FROM    Table1.SerialNumber
        LEFT JOIN 
        (   SELECT  DISTINCT SerialNumber
            FROM    Table2
        ) Table2
            ON Table2.SerialNumber = Table1.SerialNumber

答案 1 :(得分:1)

如果我们假设每个表中的序列号都是唯一的,那么您可以进行外连接。使用LEFT OUTER JOIN将从左侧抓取所有行,并可选择在右侧抓取任何匹配的行。然后你可以进行比较,看看是否在table2中找到了匹配的行。

SELECT t1.serial, CASE WHEN t2.serial IS NULL THEN 'No' ELSE 'Yes' END
FROM table1 t1
LEFT OUTER JOIN table2 t2 ON t1.serial = t2.serial;

答案 2 :(得分:1)

试试这个

SELECT t1.serialnumber as serialnumber, Case 
WHEN t1.serialnumber = t2.serialnumber then    'YES' else 'NO' END
FROM table1 t1
LEFT JOIN table2 t2 with (nolock) on t1.serialnumber = t2.serialnumber;

希望这应该有用