比较2个表中的每一列,并使用python中的循环将第3个表中的匹配行和不匹配的行写为第3个表中的“Not Mapped”:
将表A的第一列与表B的第一列进行比较,如果为真,则将表A的第2列与表B的第2列进行比较,如果这也是TRUE,则将表A的第3列与第3列进行比较表B,如果这也是真的;然后将匹配的行写入新表C中,否则在表C中写为“未映射”
由于我是python的新手,因此我无法为此编写正确的代码。任何帮助将不胜感激。
我有两张桌子:
Table A
employeeiD employee, managerID, DirectorID, Date
12 A 100 234 2017-01-01
13 B 101 235 2017-01-01
14 C 104 234 2017-01-02
15 D 101 236 2017-01-01
和表B为:
Table B:
employeeID managerID DirectorID Director
12 100 234 X
12 101 235 Y
12 101 236 Z
13 102 236 W
14 104 234 V
17 105 239 U
我的表C包含以下列: employeeid,managerid,directorid,director,Date
并且此表C的输出应为:
Table C:
employeeid managerid directorid director date
12 100 234 X 2017-01-01
14 104 234 V 2017-01-02
以下代码我正在尝试:
cursor.execute(""" select * from employee """)
results = cursor.fetchall()
for result in results:
employeeID = result[0]
managerID = result[2]
DirectorID = result[3]
Date = result[4]
cursor.execute(""" select * from manager """)
dataall = cursor.fetchall()
for data in dataall:
employee = data[0]
manager = data[1]
Director = data[2]
Director_tableb = data[3]
i = 0
j = 0
while i < len(dataall) and j < len(results):
for result in results:
if employeeID == employee:
for data in dataall:
if (employeeID == employee) and (managerID == manager) and (DirectorID == Resource):
cursor.execute(""" Insert into Table_C (%s, %s, %s, %s, %s) """, (employeeID, managerID, DirectorID, Director_tableb, Date))
cursor_db.commit()
i =+ 1
j =+ 1
答案 0 :(得分:1)
现在,这是一些可以使用的内容 正如我的回答经常出现的情况一样,我会尝试为您提供一个有效的解决方案,而不是优化的解决方案。
首先,我会将第一张表中的结果存储在几个列表中。
cursor.execute(""" select * from employee """)
results = cursor.fetchall()
employeeIDs = []
managerIDs = []
directorIDs = []
dates = []
for result in results:
employeeIDs.append(result[0])
managerIDs.append(result[2])
directorIDs.append(result[3])
dates.append(result[4])
现在,我将从第二张表中获取内容并同时填写第三张表。
cursor.execute(""" select * from manager """)
dataall = cursor.fetchall()
for data in dataall:
employee = data[0]
manager = data[1]
director = data[2]
director_tableb = data[3]
i=0
while (i<len(employeeIDs)):
if (employeeIDs[i] == employee) & (managerIDs[i] == manager) & (directorIDs[i] == director):
cursor.execute(""" Insert into Table_C (%s, %s, %s, %s, %s) """, (employeeIDs[i], managerIDs[i], directorIDs[i], director_tableb, dates[i]))
cursor_db.commit()
i=len(employeeIDs)
i =+ 1
我的所作所为:我遍历第二个表格的元素,并尝试查看每个元素是否也存在于第一个表格中。
如果元素出现在第一个表中(如果if的条件为真),那么我将结束当前的内部循环并将所需的值添加到表C.
如果找不到该元素,那么我们将继续从第二个表开始下一个数据。
我写这个答案假设你用光标写的代码是正确的,但如果有什么不按预期工作,请告诉我,所以我可以纠正我的答案。
如果需要澄清我做了什么/我为什么这样做,请随时问他们 如果您有一些方法可以改进我的代码,请不要犹豫告诉我。