【问题标题】:sql query remove null, empty and only keep matching wordsql查询删除null,空并且只保留匹配的单词
【发布时间】:2014-03-18 17:05:20
【问题描述】:

我有一个首字母缩写词和匹配词列表

acronym | word
---------------
FB      | Facebook
FB      | NULL
FB      | 
T       | Twitter
R       | NULL
F       | 

如果首字母缩写词有匹配的单词,则列出它。如果首字母缩写词没有匹配的单词,则用首字母缩写词填充第二列

例如:我想输出

FB | Facebook
T  | Twitter
R  | R
F  | F

我编写了这个查询,加载时间很长,最终超时。我将如何实现预期结果?

select s1.acronym,
        case 
            when s1.acronymnot in  -- acronyms dont have a matching value
                (select s2.acronym
                from myTable s2
                where word is not null and word !='')
                then s1.acronym
            else s1.word
        end as 'word'

    from myTable s1
    where s1.acronym!=''
    and s1.acronymis not null 

【问题讨论】:

    标签: sql timeout


    【解决方案1】:

    检查下面的查询,它会帮助你

     SELECT  DISTINCT p.acronym, 
     CASE WHEN ISNULL(q.Word,'') = '' THEN p.acronym ELSE ISNULL(q.Word,'')
     END AS Word
     FROM table1 p LEFT OUTER JOIN
     (SELECT a.acronym ,ISNULL(a.Word,'') Word
     FROM table1 a
     WHERE ISNULL(a.Word,'') <> '') q ON p.acronym = q.acronym
    

    【讨论】:

    • 谢谢。这个问题是有重复的首字母缩写词。例如:... FB |脸书、脸书 | Facebook,......我认为数据太糟糕了。删除重复项的最佳方法是什么?
    • 首先你确定你想要FB或Facebook什么记录?那么您需要一些全局逻辑来删除查询结果中的额外记录。
    【解决方案2】:

    这个呢:

    DECLARE @temp TABLE
    (
        accronym varchar(50)
    )
    
    INSERT INTO @temp
    SELECT accronym FROM accro
    WHERE name is not null AND name != ''
    
    SELECT accronym, name
    FROM accro as tmp
    WHERE name is not null AND name != ''
    UNION
    SELECT accronym, 
        CASE 
            WHEN name IS NULL OR name = ''
            THEN accronym
            ELSE name
        END
    FROM accro
    WHERE (name is null OR name = '') AND accronym NOT IN (SELECT accronym FROM @temp)
    

    【讨论】:

      猜你喜欢
      • 2023-01-31
      • 2012-05-28
      • 2018-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多