0

我有 2 张桌子... table1 和 table2。

我想显示 table1 中的所有序列号

table2 里面也有序列号

我想将table1中的序列号与table2进行比较

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

这可能与 sql 语句有关还是我必须建立一个单独的表?我正在运行 sql 服务器。

4

3 回答 3

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

如果一个或两个表中存在重复项,则以下任一方法将起作用:

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
于 2012-05-24T15:45:15.887 回答
1

如果我们假设每个表中的序列号都是唯一的,那么您可以进行外连接。使用 aLEFT 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;
于 2012-05-24T15:42:11.517 回答
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;

希望这应该有效

于 2012-05-24T15:44:32.213 回答