2012-11-27 65 views
1

一個簡單的查詢,應該查看systemSoftware表和軟件表,並只顯示softwareId不在systemSoftware表內。SQL Server 2008列表項不在表中

這裏是我的查詢到目前爲止...

SELECT s.softwareId AS 'Software ID', 
    s.softwareDescription AS 'Software Description', 
    sv.vendorName AS 'Vendor Name', 
    c.cityName AS 'City Name' 
FROM software AS s 
JOIN systemSoftware AS ss 
ON s.softwareId = ss.softwareId 
JOIN softwareVendor AS sv 
ON s.vendorId = sv.vendorId 
JOIN city AS c 
ON sv.zipCode = c.zipCode 
WHERE s.softwareId NOT IN (ss.softwareId) 
ORDER BY s.softwareId 
GO 

當我刪除了不就顯示所有softwareId行均在systemSoftware

問題是我想要相反。那些不在systemSoftware

回答

2

你需要一個左外連接:

SELECT ss.softwareId AS 'Software ID', 
    s.softwareDescription AS 'Software Description', 
    sv.vendorName AS 'Vendor Name', 
    c.cityName AS 'City Name' 
FROM software AS s 
left outer JOIN systemSoftware AS ss 
ON s.softwareId = ss.softwareId 
left outer JOIN softwareVendor AS sv 
ON s.vendorId = sv.vendorId 
left outer JOIN city AS c 
ON sv.zipCode = c.zipCode 
WHERE ss.softwareId is NULL 
ORDER BY s.softwareId 

我也改變了ORDER BY,因爲它沒有任何意義的一列中不存在訂購。

+0

嗯,我明白了。左外連接,我需要進一步檢查。很棒! – DDDD

+1

@DDDD:對於初學者,請參閱Jeff Atwood的[關於JOIN的視覺解釋](http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html) –

+0

@marc_s :很好的來源,謝謝。 – DDDD