Ниже мой код для запуска простой базы данных по поиску работы. Когда я пытаюсь фактически заполнить базу данных с помощью операторов вставки, он добавляет каждую строку несколько раз.

CREATE TABLE IF NOT EXISTS Employers (
  Id INTEGER PRIMARY KEY autoincrement,
  Name VARCHAR(20) NOT NULL,
  Industry VARCHAR(20) NOT NULL,
  Description TEXT
  );

CREATE TABLE IF NOT EXISTS Jobs (
  Id INTEGER PRIMARY KEY autoincrement,
  EmpId INTEGER FOREIGN KEY REFERENCES Employers(Id),
  Title VARCHAR(20) NOT NULL,
  Description TEXT,
  Location VARCHAR(20) NOT NULL,
  Ann_sal INT NOT NULL  
  );

INSERT INTO Employers(Name, Industry, Description )
VALUES 
("Touchpoint Global", "IT", "We help achieve efficiency, reliability and accuracy. 
 We are experts at turning complex inputs into simple outputs.");

INSERT INTO Employers(Name, Industry, Description )
VALUES
("TyTech", "IT", "Here at Tytech, we specialise is building unique business solutions from the ground up. We focus on what you want, and how you want it.");

INSERT INTO Jobs( EmpId, Title, Description, Location, Ann_sal )
SELECT emp.Id, "Project Manager", "Project manager needed to oversee all future projects.", "GoldCoast", 80000
FROM Employers emp
WHERE emp.Name="Tytech";

INSERT INTO Jobs( EmpId, Title, Description, Location, Ann_sal )
SELECT emp.Id, "Project Manager", "Project manager needed to oversee all revolutionary projects.", "Kingscliff", 95000
FROM Employers emp
WHERE emp.Name="Touchpoint Global";

INSERT INTO Jobs( EmpId, Title, Description, Location, Ann_sal )
SELECT emp.Id, "Web Designer", "Web designer needed for upcoming business solution project.", "Kingscliff", 75750
FROM Employers emp
WHERE emp.Name="Touchpoint Global";

INSERT INTO Jobs( EmpId, Title, Description, Location, Ann_sal )
SELECT emp.Id, "Data Analist", "Data analist needed to review input data during testing phases and maintanence.", "Kingscliff", 70000
FROM Employers emp
WHERE emp.Name="Touchpoint Global";
0
user3451578 25 Апр 2014 в 08:31

2 ответа

Лучший ответ

Ваш сценарий выполняется несколько раз. Каждое повторное выполнение будет вставлять новые записи.

Чтобы гарантировать, что таблицы пусты, вы можете добавить следующие операторы перед INSERT:

DELETE FROM Employers;
DELETE FROM Jobs;

Однако, чтобы обеспечить обновление таблиц при изменении их структуры, вы должны удалить IF NOT EXISTS из операторов CREATE TABLE и убедиться, что они удаляются перед этими операторами CREATE TABLE:

DROP TABLE IF EXISTS Employers;
DROP TABLE IF EXISTS Jobs;
0
CL. 25 Апр 2014 в 07:49

Создание подходящих и значимых уникальных индексов предотвратит вставку нежелательных дубликатов. Например, по имени, отрасли или титулу.

0
Ignacio Vazquez-Abrams 25 Апр 2014 в 04:52