Help! I try to update the select statement but it seems to not work here
So, let me introduced my table Artists and Songs
Note:I already inserted these table yet
c.execute("""create table Artists(
        Artist_id INTEGER primary key,
        artist char(255),
        Most_listened_song char(255));""")
c.execute("""create table Songs(
        Song_ID INTEGER Primary key,
        Song char(255),
        Artist_ID INTEGER,
        FtArtist_ID INTEGER null,
        Genre_ID INTEGER,
        dates Date,
        views INTEGER,
        Foreign key(Artist_ID) references Artists(Artist_ID),
        Foreign key(FtArtist_ID) references Artists(Artist_ID),Foreign Key(Genre_ID) references Genres(Genre_ID));""")
and, this is where I update SELECT statement and cause me an error
    result1='Roar'
    result2='Katy Perry'
    c.execute("""UPDATE Songs Set views = views+1 FROM Songs 
                 Inner join Artists On Artists.Artist_ID = Songs.Artist_ID
                 where Song = ? and Artist = ?""",(result1,result2,))
This is the error
sqlite3.OperationalError: ambiguous column name: views
So I decided to change from views to  Songs.views
result1='Roar'
result2='Katy Perry'
c.execute("""UPDATE Songs Set Songs.views = Songs.views+1 FROM Songs 
             Inner join Artists On Artists.Artist_ID = Songs.Artist_ID
             where Song = ? and Artist = ?""",(result1,result2,))
 
and, it still gave me the error after running
sqlite3.OperationalError: near ".": syntax error
Which one should I edit
Advertisement
Answer
If your version of SQLite is 3.33.0+ then you can use SQlite’s UPDATE-FROM extension to UPDATE statement, with this syntax:
UPDATE Songs SET views = views + 1 FROM Artists WHERE Artists.Artist_ID = Songs.Artist_ID AND Songs.Song = ? AND Artists.Artist = ?
For previous versions of SQLite you can do it with a subquery:
UPDATE Songs SET views = views + 1 WHERE Song = ? AND Artist_ID = (SELECT Artist_ID FROM Artists WHERE Artist = ?)