【问题标题】:SQL Related - Code modification request and adviceSQL 相关 - 代码修改请求和建议
【发布时间】:2017-06-15 07:36:10
【问题描述】:

这里是新手!我有一些 SQL 代码,其中包含许多充当规则的子选择。现在我有许多使用 LIKE 运算符的嵌套 WHERE 子句,但是我想知道是否有一种方法可以合并代码或合并条件。

SELECT   TOP 1 [ID]
         FROM [forecast].[dbo].[forecast_tool_product_identifiers]
         WHERE [macro_products_id] = '3' -- Macro Prouduct Dropdown
         AND ISNULL([source_attribute_1],' ') LIKE                    

         (SELECT 
         [col1]-- First RULE value
         FROM [forecast].[dbo].[forecast_tool_rule_templates]
         WHERE [template_name] = 'testADI001' -- Current rule Template
         AND [rule_sequence] = '1') -- RULE sequence number (will be looped)
AND ISNULL([source_attribute_2],' ') LIKE 
         (SELECT 
         [col2]-- Second RULE value - etc.
         FROM [forecast].[dbo].[forecast_tool_rule_templates]
         WHERE [template_name] = 'testADI001'
         AND [rule_sequence] = '1')
AND ISNULL([source_attribute_3],' ') LIKE 
         (SELECT 
         [col3]
         FROM [forecast].[dbo].[forecast_tool_rule_templates]
         WHERE [template_name] = 'testADI001'
         AND [rule_sequence] = '1')
AND ISNULL([source_attribute_4],' ') LIKE 
         (SELECT 
         [col4]
         FROM [forecast].[dbo].[forecast_tool_rule_templates]
         WHERE [template_name] = 'testADI001'
         AND [rule_sequence] = '1')
AND ISNULL([source_attribute_5],' ') LIKE 
         (SELECT 
         [col5]
         FROM [forecast].[dbo].[forecast_tool_rule_templates]
         WHERE [template_name] = 'testADI001'
         AND [rule_sequence] = '1')
AND ISNULL([source_attribute_6],' ') LIKE 
         (SELECT 
         [col6]
         FROM [forecast].[dbo].[forecast_tool_rule_templates]
         WHERE [template_name] = 'testADI001'
         AND [rule_sequence] = '1')
AND ISNULL([source_attribute_7],' ') LIKE 
         (SELECT DISTINCT
         [col7]
         FROM [forecast].[dbo].[forecast_tool_rule_templates]
         WHERE [template_name] = 'testADI001'
         AND [rule_sequence] = '1')
AND ISNULL([source_attribute_8],' ') LIKE 
         (SELECT 
         [col8]
         FROM [forecast].[dbo].[forecast_tool_rule_templates]
         WHERE [template_name] = 'testADI001'
         AND [rule_sequence] = '1')
AND ISNULL([source_attribute_9],' ') LIKE 
         (SELECT 
         [col9]
         FROM [forecast].[dbo].[forecast_tool_rule_templates]
         WHERE [template_name] = 'testADI001'
         AND [rule_sequence] = '1')
AND ISNULL([source_attribute_10],' ') LIKE 
         (SELECT 
         [col10]
         FROM [forecast].[dbo].[forecast_tool_rule_templates]
         WHERE [template_name] = 'testADI001'
         AND [rule_sequence] = '1')
AND ISNULL([source_attribute_11],' ') LIKE 
         (SELECT 
         [col11]
         FROM [forecast].[dbo].[forecast_tool_rule_templates]
         WHERE [template_name] = 'testADI001'
         AND [rule_sequence] = '1')
AND ISNULL([source_attribute_12],' ') LIKE 
         (SELECT 
         [col12]
         FROM [forecast].[dbo].[forecast_tool_rule_templates]
         WHERE [template_name] = 'testADI001'
         AND [rule_sequence] = '1') AND [ID] -- Application Drop Down values below
      IN 
      (SELECT [ID]
      FROM [forecast].[dbo].[forecast_tool_product_identifiers]
      WHERE [macro_products_id] = '3' AND
      ISNULL([source_attribute_1],' ') LIKE '%' AND
      ISNULL([source_attribute_2],' ') LIKE '%' AND
      ISNULL([source_attribute_3],' ') LIKE '%' AND
      ISNULL([source_attribute_4],' ') LIKE '%' AND
      ISNULL([source_attribute_5],' ') LIKE '%' AND --  ETH-10GE (TEST VALUE)
      ISNULL([source_attribute_6],' ') LIKE '%' AND
      ISNULL([source_attribute_7],' ') LIKE 'BLTMMDCH' AND --  NYCMNY54 (TEST VALUE)
      ISNULL([source_attribute_8],' ') LIKE '%' AND
      ISNULL([source_attribute_9],' ') LIKE '%' AND --  AGSTMEST (TEST VALUE)
      ISNULL([source_attribute_10],' ') LIKE '%' AND
      ISNULL([source_attribute_11],' ') LIKE '%' AND
      ISNULL([source_attribute_12],' ') LIKE '%');--  KT (TEST VALUE)

提前谢谢你!

【问题讨论】:

标签: sql sql-server sql-like


【解决方案1】:

看起来可以简化

              SELECT TOP 1 [ID]
              FROM [forecast].[dbo].[forecast_tool_product_identifiers]
              CROSS APPLY (
                 SELECT [COL1], 
                        -- ... 
                        [COL12]
                 FROM [forecast].[dbo].[forecast_tool_rule_templates]
                 WHERE [template_name] = 'testADI001' -- Current rule Template
                    AND [rule_sequence] = '1') tpl
              WHERE [macro_products_id] = '3' -- Macro Prouduct Dropdown
              AND ISNULL([source_attribute_1],' ') LIKE  tpl.[COL1]
               -- ...   
              AND ISNULL([source_attribute_12],' ') LIKE  tpl.[COL12] 
              AND [ID] -- Application Drop Down values below
       IN 
      (SELECT [ID]
      FROM [forecast].[dbo].[forecast_tool_product_identifiers]
      WHERE [macro_products_id] = '3' AND
      ISNULL([source_attribute_1],' ') LIKE '%' AND
      ISNULL([source_attribute_2],' ') LIKE '%' AND
      ISNULL([source_attribute_3],' ') LIKE '%' AND
      ISNULL([source_attribute_4],' ') LIKE '%' AND
      ISNULL([source_attribute_5],' ') LIKE '%' AND --  ETH-10GE (TEST VALUE)
      ISNULL([source_attribute_6],' ') LIKE '%' AND
      ISNULL([source_attribute_7],' ') LIKE 'BLTMMDCH' AND --  NYCMNY54 (TEST VALUE)
      ISNULL([source_attribute_8],' ') LIKE '%' AND
      ISNULL([source_attribute_9],' ') LIKE '%' AND --  AGSTMEST (TEST VALUE)
      ISNULL([source_attribute_10],' ') LIKE '%' AND
      ISNULL([source_attribute_11],' ') LIKE '%' AND
      ISNULL([source_attribute_12],' ') LIKE '%');--  KT (TEST VALUE)

【讨论】:

  • 哇!这确实加快了进程。查询优化的好结果!谢谢!
猜你喜欢
  • 2020-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-05
  • 1970-01-01
  • 1970-01-01
  • 2018-03-30
相关资源
最近更新 更多