我有 2 张桌子... table1 和 table2。
我想显示 table1 中的所有序列号
table2 里面也有序列号
我想将table1中的序列号与table2进行比较
然后,我想显示 table1 中的所有序列号,如果序列号在 table1 中,则第二列为 yes ,如果不是,则为 no
这可能与 sql 语句有关还是我必须建立一个单独的表?我正在运行 sql 服务器。
我有 2 张桌子... table1 和 table2。
我想显示 table1 中的所有序列号
table2 里面也有序列号
我想将table1中的序列号与table2进行比较
然后,我想显示 table1 中的所有序列号,如果序列号在 table1 中,则第二列为 yes ,如果不是,则为 no
这可能与 sql 语句有关还是我必须建立一个单独的表?我正在运行 sql 服务器。
如果每个表中的序列号是唯一的,那么您可以使用:
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
如果我们假设每个表中的序列号都是唯一的,那么您可以进行外连接。使用 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;
试试这个
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;
希望这应该有效