我需要比较SQLlite数据库(.db)中的两列,如果我发现巧合,则修改第三列。即:
A B C
-------
11 1 F
21 3 F
54 21 V
65 4 F
96 9 F
82 5 F
71 11 V
53 5 F
如果任何数量的列" B"列在" A"列中的结果" C"将是" V"。
专栏" C"默认情况下,在开始比较之前,将为所有行设置为F.我使用的是Python 2.7和SQLlite 3,但我真的不知道如何进行这种比较。
答案 0 :(得分:1)
UPDATE mytable
SET C = 'V'
WHERE B IN (SELECT A FROM mytable)
这是一个完整的Python程序,用于显示它的工作原理:
# from __future__ import print_function # uncomment import for Python 2.7
import sqlite3
connection = sqlite3.connect(':memory:')
cursor = connection.cursor()
cursor.execute('CREATE TABLE mytable (A INTEGER, B INTEGER, C TEXT)')
initial_AB_vals = [(11, 1), (21, 3), (54, 21), (65, 4), (96, 9), (82, 5), (71, 11), (53, 5)]
cursor.executemany("INSERT INTO mytable(A, B, C) VALUES (?, ?, 'F')", initial_AB_vals)
print('BEFORE UPDATE')
for row in cursor.execute('SELECT * FROM mytable'):
print(' {:2d} {:2d} {}'.format(*row))
cursor.execute("UPDATE mytable SET C = 'V' WHERE B IN (SELECT A FROM mytable)")
print()
print('AFTER UPDATE')
for row in cursor.execute('SELECT * FROM mytable'):
print(' {:2d} {:2d} {}'.format(*row))
connection.commit()
connection.close()
输出
BEFORE UPDATE
11 1 F
21 3 F
54 21 F
65 4 F
96 9 F
82 5 F
71 11 F
53 5 F
AFTER UPDATE
11 1 F
21 3 F
54 21 V
65 4 F
96 9 F
82 5 F
71 11 V
53 5 F
答案 1 :(得分:0)
您可以使用UPDATE ... WHERE EXISTS更新您的值,如:
UPDATE mt
SET mt.C = 'V'
FROM mytable mt
WHERE EXISTS (SELECT 1 FROM mytable mt2 WHERE mt.A = mt2.B)
;