高级Sql查询以识别缺失的数据

时间:2014-11-14 00:08:29

标签: sql sql-server relationship

我目前正在处理一个sql server table' suburb'它有一个suburb_id列和一个adjacent_suburb_ids列。 adjacent_suburb_ids列是逗号分隔的其他suburb_ids字符串。

我发现有些记录没有回复 -

例如" SuburbA"有"郊区B"在adjacent_suburb_ids中的id但是" SuburbB"没有" SuburbA"在adjacent_suburb_ids中的id

我需要识别所有不会对adjacent_suburbs做出反应的郊区,我可以使用SQL查询吗?

请不要对数据/表结构发表评论,因为它不在我的控制范围内,我无法对其进行更改。

1 个答案:

答案 0 :(得分:2)

假设我正确理解了您的问题,您可以使用likenot like运算符将表格加入到自身中:

select s.suburb_id, s2.suburb_id as s2id
from suburb s 
  join suburb s2 on 
    s.suburb_id <> s2.suburb_id
    and ',' + s2.adjacent_suburb_ids + ',' like 
        '%,' + cast(s.suburb_id as varchar(10)) + ',%' 
    and ',' + s.adjacent_suburb_ids + ',' not like 
        '%,' + cast(s2.suburb_id as varchar(10)) + ',%' 

您需要在集合之前和之后连接逗号以在集合中进行搜索。是的,如果你有机会,你应该考虑规范化数据。