需要帮助来优化SQL查询

时间:2013-11-01 05:15:08

标签: sql sql-server sql-server-2008

我有一个sql主表CHANNEL_PT 我想基于另外两个主表CHANNELPT来填写。

三个列CHANNEL_PTCHANNEL_PT_CDCHANNEL_CD的{​​{1}} cosist。

将记录插入PT_CD的方案是这样的, 如果我在CHANNEL_PT表中有两个条目,

enter image description here

CHANNEL表中的两个条目如下,

enter image description here

然后PT表格如下

enter image description here

我知道这可以通过CHANNEL_PT完成,但由于性能问题,我没有使用它。

我已经编写了如下查询以获得预期结果,但想知道任何其他更有效的方法或优化查询。

CURSOR

2 个答案:

答案 0 :(得分:1)

听起来你正在描述一个交叉连接。列CHANNEL_PT_CD是否定义为IDENTITY列?这样就无需分配该值,因为服务器会为您完成。

然后你可以做一个简单的INSERT / SELECT

INSERT INTO CHANNEL_PT
SELECT b.CHANNEL_CD, c.PT
  FROM CHANNEL b 
 cross join PT c

答案 1 :(得分:0)

请尝试:

DECLARE @CPT INT=0;
SELECT @CPT = ISNULL(MAX(CHANNEL_PT_CD),0) FROM CHANNEL_PT

INSERT INTO CHANNEL_PT
SELECT DISTINCT @CPT+ROW_NUMBER() OVER(ORDER BY b.CHANNEL_CD),
     b.CHANNEL_CD, 
     c.PT
FROM CHANNEL b, PT c
WHERE (SELECT COUNT(*) FROM CHANNEL_PT a 
       WHERE a.CHANNEL_CD=b.CHANNEL_CD AND a.PT_CD=c.PT)=0