使用来自另一个表和变量的唯一/不同数据填充表的SQL查询?

时间:2016-01-21 18:41:02

标签: sql sql-server database qt

我在Windows7平台和Qt5上使用MS SQL Server 2012来开发使用数据库的应用程序。我擅长Qt,但我没有SQL技能 目前我有一个名为Devices的表,如下所示:

DeviceSerial  DeviceIPAddr  DeviceSwVersion   
===========================================
1000          192.168.1.1   8.00    
1043          192.168.1.2   8.00    
1045          192.168.1.2   8.01    
1049          192.168.1.3   8.00    
1055          192.168.1.4   8.00    
1058          192.168.1.6   8.00    
1060          192.168.1.5   8.00    
1061          192.168.1.8   8.01    
1066          192.168.1.3   8.00    
1070          192.168.1.10  8.00    
1071          192.168.1.12  8.00     
...   

还有另一个名为CommandQueue的表,(它是空的或应该在此操作之前?)并且应该根据第一个表字段DeviceIPAddr和数据来填充数据。我的应用程序中的参数(整数)的值,如下所示:

TargetIP       CommandID
========================
192.168.1.1    30 
192.168.1.2    30 
192.168.1.3    30 
192.168.1.4    30 
192.168.1.5    30 
192.168.1.6    30 
192.168.1.8    30 
192.168.1.10   30  
192.168.1.12   30  
...    

对于commandID表的所有行,CommandQueue的值在一个时刻是相同的。为了示例/示例,我选择了30.

如何创建SQL查询以填充CommandQueue表?

2 个答案:

答案 0 :(得分:2)

使用INSERT INTO .. SELECT FROM构建

insert into CommandQueue(TargetIP, CommandID)
select DeviceIPAddr,
@someparameter_value
from Devices; 

如果你想说

,你也可以硬编码那个值
insert into CommandQueue(TargetIP, CommandID)
select DeviceIPAddr, 30 //assuming CommandID is INT
from Devices; 

根据您的评论,您可以更改查询本身,如

insert into CommandQueue(TargetIP, CommandID)
select d.DeviceIPAddr,
@someparameter_value
from Devices d
left join CommandQueue ck on d.DeviceIPAddr = ck.TargetIP
and ck.CommandID <> @someparameter_value
where ck.TargetIP is null; 

答案 1 :(得分:1)

INSERT  INTO CommandQueue
        ( TargetIP ,
          CommandID )
SELECT  DISTINCT -- Only unique rows
        DeviceIPAddr ,
        @parameter1
FROM    Devices a
        LEFT OUTER JOIN CommandQueue b ON a.DeviceIPAddr = b.TargetIP
                                          AND b.CommandID = @parameter1
WHERE   b.DeviceIPAddr IS NULL
        AND a.DeviceSwVersion = 8

以下内容将仅向CommandQueue插入DeviceIPAddr + @ parameter1尚未在CommandQueue中的设备中的数据。插入的记录必须具有DeviceSwVersion = 8。

/* add author below title on single product */

function cn_add_add_subhead_to_title() {

  global $woocommerce, $post;

$meta = get_post_meta( $post->ID, '_text_field', true );
    if( $meta != '' ) {
    ?>
    <div class="cn-subhead">
      by <?php echo get_post_meta( $post->ID, '_text_field', true ); ?>  
    </div>
    <?php

 }

}
add_action( 'woocommerce_single_product_summary', 'cn_add_add_subhead_to_title', 6 );