В таблице 1 есть столбец с именем calendar_date, запись в формате 8.10.2010, в таблице 2 есть столбец с именем date, в формате 10/8.
В таблице 2 есть два других столбца с именем daynoleap, dayleap, которые указывают номер даты в юлианском году или в високосном году. Теперь мне нужно добавить один столбец из этих двух в table1, определяемый годом столбца calendar_date. Если это 2010, он делится на 4 и имеет остаток, поэтому я добавляю столбец daynoleap в table2 в столбец julian_date в table1. В противном случае я добавляю столбец dayleap к нему.
Я получаю сообщение об ошибке: более одной строки, возвращенной подзапросом, используемым в качестве выражения, с использованием приведенных ниже кодов: (на данный момент, я думаю, ошибка произошла из оператора запроса). Все коды находятся в пределах цикла, в котором я получил единственную запись переменной года (например ,.2010), monthDate (например, 10/10).
while int(year)%4 == 0:
statement2="UPDATE table1 SET julian_date = (SELECT dayleap FROM table2 WHERE date = '%s') WHERE (SELECT date FROM table2) = '%s'"
statement2=statement2 % (monthDate, monthDate)
curs2 = conn.cursor()
curs2.execute(statement2,)
conn.commit()
очевидно, что с кодами что-то не так, чтобы не допустить обновления одной записи. Но так как у меня уже есть предложение WHERE для оператора update, я также не вижу проблем с оператором. Я пытался переключить два значения влево и вправо от знака равенства и т. Д., Но не получилось. Кто-нибудь может мне помочь?
Решение:
Я решил эту проблему, используя коды ниже:
statement1='SELECT date FROM table1'
curs1.execute(statement1)
records1=curs1.fetchall()
for record1 in records1:
date = record1[0].split('/')
monthDate=date[0]+ '/'+date[1]
if int(year)%4 == 0: #for leap year
statement_tmp = "SELECT dayleap FROM table2 WHERE date = '%s'" % (monthDate) #the date column in table2 is in format of month/date.
curs1.execute(statement_tmp)
julianDate1 = curs1.fetchall()
julianDate = curs1.fetchall()[0][0]
statement = "UPDATE table1 SET juliandate = '%s' WHERE date = '%s'" % (julianDate, fullDate)
curs1.execute(statement)
conn.commit()
else: # for nonleap year