使用两个 select 语句时无法插入单独的列
Can't Insert into seperate column while using two select statements
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")
TABLE:
姓名:Jance C hiatt、Sam、Brook、纽约、伦敦
地址 : NULL,NULL,NULL,NULL
NewYork 和 London 应该是地址栏,但它显示在名称本身上
这里地址不是来自数据库的单独列。请告诉我我面临的问题
每个 insert
语句都会创建新行,因此您不能指望您的查询会自动对齐同一行上的相关值。
我怀疑您的 EAV 模型看起来像这样:
page label entity
+-------+-------+--------
page1 NAME foo
page1 ADDRESS bar
并且您想在目标 table 中旋转它,如下所示:
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
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")
TABLE:
姓名:Jance C hiatt、Sam、Brook、纽约、伦敦 地址 : NULL,NULL,NULL,NULL
NewYork 和 London 应该是地址栏,但它显示在名称本身上
这里地址不是来自数据库的单独列。请告诉我我面临的问题
每个 insert
语句都会创建新行,因此您不能指望您的查询会自动对齐同一行上的相关值。
我怀疑您的 EAV 模型看起来像这样:
page label entity
+-------+-------+--------
page1 NAME foo
page1 ADDRESS bar
并且您想在目标 table 中旋转它,如下所示:
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