从一个表中选择Mysql中另一个表中不存在的数据
我有两张桌子,表一和表二 表2包含表中的记录,其中一些列较少。每次调用该过程时,它都会检查列的组合(复合键,尽管未声明)是否存在 如果存在,则更新其中一列,否则生成新条目从一个表中选择Mysql中另一个表中不存在的数据,mysql,join,Mysql,Join,我有两张桌子,表一和表二 表2包含表中的记录,其中一些列较少。每次调用该过程时,它都会检查列的组合(复合键,尽管未声明)是否存在 如果存在,则更新其中一列,否则生成新条目 desc MAIN_TBL; +---------------+-------------+------+-----+---------------------+----------------+ | Field | Type | Null | Key | Default
desc MAIN_TBL;
+---------------+-------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| LinkID | int(11) | YES | MUL | NULL | |
| Protocol | varchar(10) | YES | | NULL | |
| SourceIP | varchar(30) | YES | | NULL | |
| DestinationIP | varchar(30) | YES | | NULL | |
| SourcePort | int(11) | YES | | NULL | |
| DestPort | int(11) | YES | | NULL | |
| NoOfBytes | int(11) | YES | | NULL | |
| insertTime | timestamp | NO | | CURRENT_TIMESTAMP | |
| StartTime | timestamp | NO | | 0000-00-00 00:00:00 | |
| EndTime | timestamp | NO | | 0000-00-00 00:00:00 | |
| Direction | varchar(10) | YES | | NULL | |
| Trafficbps | int(11) | YES | | NULL | |
| nFlows | int(11) | YES | | NULL | |
| flag | tinyint(1) | YES | | 0 | |
+---------------+-------------+------+-----+---------------------+----------------+
数据
select Protocol,SourceIP,DestinationIP,SourcePort,DestPort,NoOfBytes from MAIN_TBL;
+----------+----------+---------------+------------+----------+-----------+
| Protocol | SourceIP | DestinationIP | SourcePort | DestPort | NoOfBytes |
+----------+----------+---------------+------------+----------+-----------+
| TCP | 1.1.1.1 | 2.2.2.2 | 1080 | 443 | 10000 |
| TCP | 1.1.1.1 | 2.2.2.2 | 1080 | 8080 | 20000 |
| TCP | 1.1.1.1 | 2.2.2.2 | 1090 | 8080 | 20000 |
+----------+----------+---------------+------------+----------+-----------+
表2:
desc SRCIP_TOP_TALKERS5;
+---------------+-------------+------+-----+-------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+-------------+------+-----+-------------------+-------+
| SourceIP | varchar(30) | YES | | NULL | |
| DestinationIP | varchar(30) | YES | | NULL | |
| DestPort | int(11) | YES | | NULL | |
| SourcePort | int(11) | YES | | NULL | |
| Protocol | varchar(10) | YES | | NULL | |
| NoOfBytes | int(11) | YES | | NULL | |
| Time_1 | timestamp | NO | | CURRENT_TIMESTAMP | |
+---------------+-------------+------+-----+-------------------+-------+
数据
select Protocol,SourceIP,DestinationIP,SourcePort,DestPort,NoOfBytes from SRCIP_TOP_TALKERS5;
+----------+----------+---------------+------------+----------+-----------+
| Protocol | SourceIP | DestinationIP | SourcePort | DestPort | NoOfBytes |
+----------+----------+---------------+------------+----------+-----------+
| TCP | 1.1.1.1 | 2.2.2.2 | 1080 | 443 | 10000 |
+----------+----------+---------------+------------+----------+-----------+
现在,我的过程首先更新那些组合(SourcePort、DestPort、SourceIP、DestinationIP、Protocol)出现在SRCIP\u TOP\u TALKERS5中的条目
查询是:
update SRCIP_TOP_TALKERS5 T1 INNER JOIN MAIN_TBL T2
on
T1.SourceIP = T2.SourceIP and
T1.DestinationIP = T2.DestinationIP and
T1.DestPort = T2.DestPort and
T1.SourcePort = T2.SourcePort and
T1.Protocol = T2.Protocol
set T1.NoOfBytes=T1.NoOfBytes+T2.NoOfBytes;
之后,我希望插入未找到匹配项的其余行。
如果您考虑我现有的数据(如上文所示),则应该从MiNETTBL输出2行,其中5个元组的组合不存在于SrcIPpTopiTalks5<5/强> < p>您可以做右连接。< /P>
UPDATE SRCIP_TOP_TALKERS5 T1
RIGHT JOIN MAIN_TBL T2 ON T1.SourceIP = T2.SourceIP
AND T1.DestinationIP = T2.DestinationIP
AND T1.DestPort = T2.DestPort
AND T1.SourcePort = T2.SourcePort
AND T1.Protocol = T2.Protocol
set T1.NoOfBytes= COALESCE(T1.NoOfBytes,0) + T2.NoOfBytes;
如果T1不是T2的子集,请合并T2。如果这对您有效,请告诉我 我通过参考SO上的其他链接找到了答案 我需要做一个左连接并进行空检查(这里重要的是从select中的两个表中提取所有列)
伙计们,如果需要一些信息,请告诉我..嗨,Raghav,mysql不支持完全外部连接。。我尝试将“完全外部联接”替换为“联接”来进行查询,其行为类似于我上面给出的查询。(它更新现有记录的noobbytes)。我的实际查询是查找SRCIP_TOP_TALKERS5表中不存在的记录。
select T1.NoOfBytes as NoOfBytes,T1.Protocol as Protocol,T1.SourcePort as SourcePort,T1.SourceIP as SourceIP,
T1.DestinationIP as DestinationIP,T1.DestPort as DestPort,
T2.Protocol as Proto,T2.SourcePort as srcPrt,T2.SourceIP as SrcIP,T2.DestinationIP as DestIP,T2.DestPort as DstPrt
from MAIN_TBL T1 left join SRCIP_TOP_TALKERS5 T2
on T1.SourceIP = T2.SourceIP and
T1.DestinationIP = T2.DestinationIP and
T1.DestPort = T2.DestPort and
T1.SourcePort = T2.SourcePort and
T1.Protocol = T2.Protocol
where T2.SourcePort is null