我有2个表... table1和table2。
我想显示table1
中的所有序列号table2中也有序列号
我想比较table1中的序列号和table2
然后我想在table1中显示所有序列号,如果序列号在table1中则为第二列,如果不是
则为第二列这可能与sql语句有关,还是我必须构建一个单独的表?我正在运行sql-server。
答案 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;
希望这应该有用