/ / MYSQL Перевірте наявність дублікатів і вставте, якщо інше поле має певне значення - mysql

MYSQL Перевірте наявність дублікатів і вставте, лише якщо іншим полем є певне значення - mysql

Якщо я вставляю дані в таблицю з наступними полями:

serialNumber активна країна

Мені потрібно лише вставити повторювані серійні номери, якщо активний немає.

Так, наприклад: я хочу вставити запис із serialNumber 1234.

Якщо серійний номер не існує вСтіл йти вперед і додати його. Якщо він вже існує, перевірте, чи є значення "активним" активним, "так", тоді не додавайте нову записку, якщо вона ніколи не додаватимете запис.

Будь-які ідеї, як це досягти в MYSQL?

Відповіді:

1 для відповіді № 1

Ви можете використовувати оператор ON DUPLICATE KEY після запиту INSERT INTO, щоб оновити рядок, якщо він вже існує. Документація: https://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

INSERT INTO table (serialNumber , active, country) VALUES (1010, "no", "FR")
ON DUPLICATE KEY UPDATE active="yes";

2 для відповіді № 2

Якщо у таблиці відсутні необхідні унікальні ключі, і у вас немає дозволу або не потрібно встановлювати потрібні вам ключі, ви можете скористатися цією альтернативою:

INSERT INTO `table1`
(`field1`,
`field2`)
SELECT value1,
value2
FROM   (SELECT 1) t_1
WHERE  NOT EXISTS (SELECT 1
FROM   `table1`
WHERE  `field1` = value1
AND `field2` = value2);

Для запитання можна написати як

INSERT INTO `activity`
(`serialNumbers`,
`active`)
SELECT 1234,
"yes"
FROM   (SELECT 1) t_1
WHERE EXISTS (SELECT 1
FROM   `activity`
WHERE  `serialNumbers` = 1234
AND `active` = "no");

0 для відповіді № 3

Ви можете скористатись insert ... on duplicate key update в MySQL. Це схоже на MERGE, що використовується в інших базах даних SQL, але MySQL не забезпечує випис MERGE, тому це найкраще наступне.

INSERT INTO TABLE (serialNumber, active, country)
VALUES (1234, "active", "GB") ON DUPLICATE KEY UPDATE country = "ND";

Також використовуйте INSERT IGNORE якщо ви не хочете створювати помилки.