比较2个表中的每一列,并使用python中的循环在第3个表中写入匹配的行

时间:2017-07-23 20:18:31

标签: python mysql

比较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

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. 如果找不到该元素,那么我们将继续从第二个表开始下一个数据。

我写这个答案假设你用光标写的代码是正确的,但如果有什么不按预期工作,请告诉我,所以我可以纠正我的答案。

如果需要澄清我做了什么/我为什么这样做,请随时问他们 如果您有一些方法可以改进我的代码,请不要犹豫告诉我。