删除没有主键约束的表中的行

时间:2018-03-15 08:41:18

标签: mysql sql vertica

有两个表A和B具有相同的结构(列数,列名等)。 A和B都没有主键约束。某些列值可以为null,但不作为约束提及。

创建表格如下所示

CREATE TABLE IF NOT EXISTS TableA 
( col1 INT,
  col2 VARCHAR(50)
  col3 BIGINT )

我需要删除A中的行,即B中的A = A - B

原始表中有大约100列(我已在上面对其进行了简化)。所以列出所有列是不可取的。

我该如何完成这项任务?

我必须使用INSERT INTO从另一个表C中添加行。

 INSERT INTO tableA VALUES 
 ( 
   SELECT * From tableC 
   EXCEPT 
   SELECT * from tableA 
 )

3 个答案:

答案 0 :(得分:0)

将表A的左连接与表B一起使用,并选择所有列 加入时“ON”条件选择表B中任何列中具有空值的那些行或记录。 例如:

表A:

id  name    data
1   DAN     123
2   ANTONY  234
3   DAN     456
4   DAN     856
5   JOSEPH  546
6   ANTONY  784
7   JOSEPH  896

表B:

id  name    data
1   DAN     123
5   JOSEPH  546
7   JOSEPH  896
上述问题的

QUERY 是:

SELECT A.id,A.name,A.data
FROM A
LEFT JOIN B
ON A.id = B.id
AND A.name = B.name
AND A.data = b.data
WHERE B.id IS NULL;

结果是:

id  name    data
2   ANTONY  234
3   DAN     456
4   DAN     856
6   ANTONY  784

您也可以在以下链接中查看:

  

http://sqlfiddle.com/#!9/d9e34b/4

答案 1 :(得分:0)

 delete from A where (column1, column2) not in 
((
select column1, column2from A
minus 
select column1, column2 from B
))

在select语句中包含表中的所有列。正如您所提到的,两个表具有相同数量的列和名称,此查询将适合您

答案 2 :(得分:0)

您可以使用A和B表之间的内部联接

从A中删除数据
import tensorflow as tf
scaffold = tf.train.Scaffold(saver=tf.train.Saver(max_to_keep=10))
with tf.train.MonitoredTrainingSession(scaffold=scaffold) as sess:
    ...

尝试按照演示

Demo