2013-02-01 83 views
0

請考慮我有兩張桌子。如何從Sql Server 2005獲取已過濾的記錄?

一個是「Table1」,如下所示。

enter image description here

還有一個表是 「表2」,如下所示。

enter image description here

現在,這裏我需要的是,我需要所有從表1的ID是不表2中的參考列中的記錄。

請指導我如何做到這一點。

在此先感謝。

回答

1

如何與您現有的架構做(不能使用索引):

SELECT Table1.* 
FROM Table1 
WHERE NOT EXISTS 
(
    SELECT 1 
    FROM Table2 
    WHERE CONCAT(',', Table2.Reference, ',') LIKE CONCAT('%,', Table1.ID, ',%') 
) 

該如何工作是完全包裹在用逗號分隔的Reference列的每一個值。您的示例數據將以,2,3,,7,8,9,結尾。然後,您可以安全地搜索該字符串中的,<Table1.ID>,


如何真正做到這一點:

規範化數據庫,並擺脫那些醜陋而無用逗號分隔的列表。

修復您的表2是:

 
SlNo | Reference 
------+----------- 
    1 |  2 
    1 |  3 
    2 |  7 
    2 |  8 
    2 |  9 

,並添加table2Names爲:

 
SlNo | Name 
------+--------- 
    1 | Test 
    2 | Test 2 

然後,你可以簡單地做:

SELECT Table1.* 
FROM Table1 
WHERE NOT EXISTS(SELECT 1 FROM Table2 WHERE Table2.Reference = Table1.ID) 
相關問題