SQlite не поддерживает нотацию @variable, но (для ясности используется стиль именованных заполнителей, поддерживаемый привязкой Python для sqlite):
INSERT INTO user_msg_media (userId, mediaId, catagory, current_media_date)
SELECT watcher, :mediaId, :category, :current_media_date
FROM userwatch WHERE watched=:watched
Edit: SQLite, кажется, неправильно диагностирует, какое имя столбца неверно. С фиксированными именами столбцов у меня работает следующий код Python (не уверен, какой другой язык вы используете, Python - самый удобный для меня способ взаимодействия с sqlite):
import sqlite3 as sq
con = sq.connect(':memory:')
cur = con.cursor()
cur.execute("CREATE TABLE if not exists user_msg_media( " +
"msgId INTEGER PRIMARY KEY, " +
"recipientId INTEGER, " +
"mediaId INTEGER, " +
"catagory INTEGER, " +
"current_date DATE)")
cur.execute("CREATE TABLE if not exists user_watch( " +
"indx INTEGER PRIMARY KEY, " +
"watcher INTEGER, " +
"watched INTEGER)")
cur.execute("INSERT INTO user_watch VALUES (1, 2, 3)")
cur.execute("SELECT watcher FROM user_watch WHERE watched=:watched",
dict(watched=3))
print cur.fetchall()
print cur.execute("INSERT INTO user_msg_media (recipientId, mediaId, catagory, current_date) " +
"SELECT watcher, :mediaId, :category, :current_media_date " +
"FROM user_watch WHERE watched=:watched;",
dict(mediaId=0, category=0, current_media_date=0, watched=3)
)
cur.execute("SELECT * FROM user_msg_media")
print cur.fetchall()
Но если я воспроизведу несоответствия в вашем SQL, такие как current_date против current_media_date, я могу получить неверную диагностику того, что отсутствующий столбец равен watcher
, даже если этот столбец на самом деле в порядке. Хотите попробовать вернуть этот исправленный код на ваш любимый язык и посмотреть, как он себя ведет?