2012-05-24 51 views
0

我有2個表... table1和table2。表連接比較和使用該比較創建一個新列

我想從表1顯示所有序列號

表2還具有序列號在它

我想的序列號在表1與表2比較

然後,我會喜歡顯示錶1中的所有序列號,並有第二列,如果序列號在表1中有一個是或否,如果它不是

這是可能的一個SQL語句,或者我必須建立一個分開的桌子è?我正在運行sql服務器。

回答

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 
+0

優秀的答案。爲唯一序列和適用於非唯一序列的附加查詢提供最佳查詢。更好的是,在SQL Server特定的查詢旁邊提供了一個vanilla SQL查詢。真的不能得到比這更全面的答案。 – ean5533

+0

感謝您的幫助 – kev670

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; 
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; 

希望這應該工作