我有2個表... table1和table2。表連接比較和使用該比較創建一個新列
我想從表1顯示所有序列號
表2還具有序列號在它
我想的序列號在表1與表2比較
然後,我會喜歡顯示錶1中的所有序列號,並有第二列,如果序列號在表1中有一個是或否,如果它不是
這是可能的一個SQL語句,或者我必須建立一個分開的桌子è?我正在運行sql服務器。
我有2個表... table1和table2。表連接比較和使用該比較創建一個新列
我想從表1顯示所有序列號
表2還具有序列號在它
我想的序列號在表1與表2比較
然後,我會喜歡顯示錶1中的所有序列號,並有第二列,如果序列號在表1中有一個是或否,如果它不是
這是可能的一個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
如果我們假設序列號在每個表中都是唯一的,那麼您可以執行外部聯接。使用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;
試試這個
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;
希望這應該工作
優秀的答案。爲唯一序列和適用於非唯一序列的附加查詢提供最佳查詢。更好的是,在SQL Server特定的查詢旁邊提供了一個vanilla SQL查詢。真的不能得到比這更全面的答案。 – ean5533
感謝您的幫助 – kev670