【问题标题】:Can't Insert into seperate column while using two select statements使用两个选择语句时无法插入单独的列
【发布时间】:2020-12-19 12:30:36
【问题描述】:
import mysql.connector
mydb = mysql.connector.connect( host="localhost", user="root", passwd="", database="resume")
cursor = mydb.cursor()
a = "SELECT ENTITY FROM annotate1 WHERE LABEL = 'NAME' GROUP BY PAGE"
cursor.execute(a)
records = cursor.fetchall()
for i in records:
    name = i[0]
    query = "INSERT INTO sorting_report(NAME) VALUES (%s)"
    parameters = (str(name),)
    cursor.execute(query, parameters)
    mydb.commit()
print("Name inserted")

b = "SELECT ENTITY FROM annotate1 WHERE LABEL = 'ADDRESS' GROUP BY PAGE"
cursor1 = mydb.cursor()
cursor1.execute(b)
records1 = cursor1.fetchall()
for i in records:
    address = i[0]
    query = "INSERT INTO sorting_report(ADDRESS) VALUES (%s)"
    parameters = (str(address),)
    cursor.execute(query, parameters)
    mydb.commit()
print("Address inserted")

表格:

姓名:Jance Chiatt, Sam, Brook, Newyork, London 地址:NULL,NULL,NULL,NULL

NewYork 和 London 应该是地址栏,但它显示在 Name 本身上

这里的地址不在数据库的单独列中。请告诉我我面临的问题

【问题讨论】:

  • edit您的问题向我们展示您想要的结果的几行(在您的sorting_report 表中,以及您的实际结果和输入表中的几行。
  • 只要sql_modeonly_full_group_by,Select 语句就会出错

标签: python mysql sql pivot sql-insert


【解决方案1】:

每个insert 语句都会创建新行,因此您不能期望您的查询会自动对齐同一行上的相关值。

我怀疑您的 EAV 模型看起来像这样:

page     label   entity
+-------+-------+--------
page1    NAME    foo
page1    ADDRESS bar

你想像这样在目标表中旋转它:

page    name    address
+------+-------+--------
page1   foo     bar

您可以使用条件聚合在单个语句中执行此操作:

insert into sorting_report(page, name, address)
select page,
    max(case when label = 'NAME'    then entity end),
    max(case when label = 'ADDRESS' then entity end)
from annotate1 
group by page

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多