首页 > 解决方案 > (Python 3.x 和 SQL)检查多个表中是否存在条目并转换为二进制值

问题描述

我有一个“主表”,其中只包含我所有其他表中的一列 id。我还有其他几个表,其中包含一些 id 以及其他数据列。我正在尝试遍历每个较小表的所有 id,为较小的表创建一个新列,检查该表上是否存在该 id 并在主表中创建一个二进制条目。(如果 id 不存在则为 0,如果指定表上存在 id 则为 1)

这似乎很令人困惑,但它的应用是检查用户是否存在于特定日期的桌子上,并每天跟踪此信息。

现在,我正在遍历日期,并且在每次迭代中,我都在遍历所有 id 以检查它们在该日期是否存在。这可能会非常缓慢,但可能有更好的方法来做到这一点。我的代码如下所示:

def main():
    dates = init()
    id_list = getids()
    print(dates)
    for date in reversed(dates):
        cursor.execute("ALTER TABLE " + table + " ADD " + date + " BIT;")
        cnx.commit()
        for ID in id_list:
            (...)

我知道下一步将使用每个 id 生成一个查询,如下所示:

SELECT id FROM [date]_table
WHERE EXISTS (SELECT 1 FROM master_table WHERE master_table.id = [date]_table.id)

我已经被这个问题困扰了几天,到目前为止,我无法提出一个可以提供有用结果的查询。

.

例如,如果我三天有三张桌子......

周一:

+------+-----+
|  id  | ... |
+------+-----+
| 1001 | ... |
| 1002 | ... |
| 1003 | ... |
| 1004 | ... |
| 1005 | ... |
+------+-----+

周二:

+------+-----+
|  id  | ... |
+------+-----+
| 1001 | ... |
| 1003 | ... |
| 1005 | ... |
+------+-----+

周三:

+------+-----+
|  id  | ... |
+------+-----+
| 1002 | ... |
| 1004 | ... |
+------+-----+

我想最终得到一个这样的主表:

+------+--------+---------+-----------+
|  id  | monday | tuesday | wednesday |
+------+--------+---------+-----------+
| 1001 |      1 |       1 |         0 |
| 1002 |      1 |       0 |         1 |
| 1003 |      1 |       1 |         0 |
| 1004 |      1 |       0 |         1 |
| 1005 |      1 |       1 |         0 |
+------+--------+---------+-----------+

提前感谢您对此问题的任何帮助。由于这是一个令人困惑的问题,如果我可以提供任何其他详细信息,请告诉我。

标签: pythonmysqlsqlpython-3.x

解决方案


推荐阅读