2013-02-01 46 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) 
相关问题