@Apxu

Как сделать сложный sql запрос?

Добрый день,
есть две таблицы:
1. main - (id, email1, email2, flag)
2. test - (id, email)

В main очень много записей, поэтому запрос должен быть максимально "легкий"
Необходимо написать sql запрос таким образом, чтобы произошел поиск по таблице main, каждого элемента из таблицы test по полю test.email, причем сравнение в main должно быть по email1 и email2, если запись найдена - обновляем поле flag в значение 1, если нет - добавляем новую запись в main.

Например в main есть запись
id  email1            email2                     flag
10 test@t.com    second@test.com     0


В таблице test
id    email
1     second@test.com
2     new@test.com


Выполняя запрос - должны получить в таблице main следующее
id  email1                email2                     flag
10 test@t.com        second@test.com     1
11 new@test.com   new@test.com         1


Одна запись обновится, вторая добавится.

Реально ли на чистом sql такое реализовать?
  • Вопрос задан
  • 79 просмотров
Решения вопроса 2
@stunoff
Если правильно понял, то примерно так
UPDATE main m 
INNER JOIN test t ON (m.email1 = t.email AND m.email2 = t.email)
SET m.flag = 1

А потом сделать инсерт того что нет
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Уникальный ключ на `email1`, уникальный ключ на `email2`. Затем
INSERT
  INTO `main` (`email1`, `email2`, `flag`) 
  SELECT `email`, `email`, 1
    FROM `test`
  ON DUPLICATE KEY UPDATE `flag` = 1
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы