Почему этот запрос DELETE не удаляет записи из таблицы, а также не вызывает исключение - PullRequest
0 голосов
/ 30 марта 2012

У меня есть 2 таблицы: «списки» и «множественные копии»

Все записи в «множественных копиях» также существуют в «списках» и должны быть удалены из него.

Итак, для выполнения этой задачи я написал простой запрос SQLite3, завернутый в скрипт Ruby.

Это так просто, что я не понимаю, почему это не сработает. Я потратил несколько часов, пытаясь понять это, но ничего не изменилось, пробовал разные способы написать запрос, все тот же результат: записи из списков не удаляются! Я могу видеть вывод в текстовый файл, который генерируется после запуска скрипта, но в таблице все еще есть записи без изменений. Ничего не удалено !!

Вот скрипт:

require 'sqlite3'  
db = SQLite3::Database.new('development.sqlite3')  
db.results_as_hash = true;  
rows= db.execute("SELECT * FROM multipleDupeCopies ")  
rows.each do |row|  
puts 'Deleting...'  
rowid = row['id']  
puts rowid  
db.execute("DELETE FROM listings WHERE listings.id = 'rowid' ")  

end

Есть предложения, пожалуйста?


EDIT: Схема для списков

CREATE TABLE "listings" 
(
  "id"            INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
  "name"          VARCHAR(255),
  "telephone"     VARCHAR(255),
  "fax"           VARCHAR(255),
  "suite"         VARCHAR(255),
  "address"       VARCHAR(255),
  "city"          VARCHAR(255),
  "province"      VARCHAR(255),
  "postal_code"   VARCHAR(255),
  "latitude"      VARCHAR(255),
  "longitude"     VARCHAR(255),
  ...............  many more columns NOT relevant
  "created_at"    datetime NOT NULL,
  "updated_at"    datetime NOT NULL
)

Схема для нескольких копий

CREATE TABLE "multipleDupeCopies" 
(
  "id"            INTEGER PRIMARY KEY NOT NULL,
  "name"          VARCHAR(255),
  "telephone"     VARCHAR(255),
  "fax"           VARCHAR(255),
  "suite"         VARCHAR(255),
  "address"       VARCHAR(255),
  "city"          VARCHAR(255),
  "province"      VARCHAR(255),
  "postal_code"   VARCHAR(255),
  "latitude"      VARCHAR(255),
  "longitude"     VARCHAR(255),
  "url"           VARCHAR(255)
)

1 Ответ

1 голос
/ 30 марта 2012

Этот запрос работал для меня: благодаря комментарию @a_horse_with_no_name

db.execute("DELETE FROM listings WHERE id IN (SELECT id FROM multipleDupeCopies)")
...