Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / INSERT INTO IF NOT EXIST / 17 сообщений из 17, страница 1 из 1
21.11.2010, 16:43
    #36968325
RwC_LongMan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO IF NOT EXIST
Подскажите пожалуйста, мне нужно вставить все значения строк (name, score) из другой таблицы, но как не вставлять строку(или лучше апдейт делать), если значение в колонке name уже есть в вставляемой таблице? Тоесть дублирование.

Вот мои докопы:

INSERT INTO scoreperdays (name,day1) VALUES (SELECT name, score FROM scores where scoreperdays.name <> scores.name)

Версия Mysql 5.0
...
Рейтинг: 0 / 0
21.11.2010, 17:03
    #36968334
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO IF NOT EXIST
Поставить на поле уникальный индекс, или primary
...
Рейтинг: 0 / 0
21.11.2010, 17:04
    #36968337
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO IF NOT EXIST
Только запрос скорее будет выглядеть так:

INSERT IGNORE INTO scoreperdays (name,day1) VALUES (SELECT name, score FROM scores where scoreperdays.name <> scores.name)
...
Рейтинг: 0 / 0
21.11.2010, 17:16
    #36968347
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO IF NOT EXIST
Hett,

Или же INSERT ... ON DUPLICATE KEY UPDATE
если не желательно, чтобы из-за IGNORE в варнинги превращались и другие ошибки (если таковые возможны)
...
Рейтинг: 0 / 0
21.11.2010, 18:08
    #36968377
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO IF NOT EXIST
Edd.Dragon,

Пожалуй зависит от частного случая, но если записи полностью одинаковые, то IGNORE будет быстрее. А ошибок там никаких не генерируется вроде как.
...
Рейтинг: 0 / 0
21.11.2010, 18:26
    #36968390
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO IF NOT EXIST
Hett,

Ну правильно, ошибки как варнинги идут. И недопустимые значения конвертятся к ближашим допустимым. Т.е. при игноре можно например вставлять нул в "NOT NULL"-столбец. Так была ошибка, а так получим (если это число) вставку нолика без проблем. Т.е. если при синхронизации важно отлавливать вот такие некорректности данных (откуда нулл взялся там, где есго быть не должно?), тогда игнор не катит. А если важна макс. скорость, а корректность данных гарантируется, тогда конечно игнор.
...
Рейтинг: 0 / 0
21.11.2010, 20:20
    #36968482
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO IF NOT EXIST
Edd.Dragon,

>> И недопустимые значения конвертятся к ближашим допустимым.

Я советую отключить нафиг все прослабления:

SET @@global.sql_mode = “STRICT_ALL_TABLES”;

Незамеченая ошибка в загруженых данных -- ето плохо.

В редких случаях ето допустимо:

-- надо загрузить все даные бытро и чистить уже в базе
(при включеном стрикт моде).

-- Или кривой фреймворк ставит нот нул в свои таблицы
а потом сам записывает нул туда.
...
Рейтинг: 0 / 0
21.11.2010, 22:23
    #36968621
RwC_LongMan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO IF NOT EXIST
У меня только может дубликат быть в колонке name



Причем запрос
INSERT IGNORE INTO scoreperdays (name,day1) VALUES (SELECT name, score FROM scores where scoreperdays.name <> scores.name)

отдает ошибку синтаксиса.


А вот как юзать "ON DUPLICATE KEY UPDATE" не очень понял - ведь у меня будут разные же индексы.
...
Рейтинг: 0 / 0
22.11.2010, 02:27
    #36968819
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO IF NOT EXIST
Код: plaintext
1.
Причем запрос 
INSERT IGNORE INTO scoreperdays (name,day1) VALUES (SELECT name, score FROM scores where scoreperdays.name <> scores.name)

Ну естественно.


Код: plaintext
INSERT IGNORE INTO scoreperdays (name,day1) VALUES (SELECT name, score FROM scores)

Конечно смотря сколько данных в таблице.
...
Рейтинг: 0 / 0
22.11.2010, 04:39
    #36968846
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO IF NOT EXIST
RwC_LongManПричем запрос
INSERT IGNORE INTO scoreperdays (name,day1) VALUES (SELECT name, score FROM scores where scoreperdays.name <> scores.name)

отдает ошибку синтаксиса.

Поставь себя на его место и попытайся выполнить
Код: plaintext
SELECT name, score FROM scores where [color=red]scoreperdays[/color].name <> scores.name

RwC_LongManА вот как юзать "ON DUPLICATE KEY UPDATE" не очень понял - ведь у меня будут разные же индексы.
Так мануал надо читать если не понятно

INSET ....... ON DUPLICATE KEY UPDATE

Вставляем новую строку. Если нарываемся на уже существующий такой ключ, то тогда апдейтим уже существующую строку. В твоем случае в апдейте можно поставить `name` = `name` (т.е. ничего не менять).
...
Рейтинг: 0 / 0
22.11.2010, 04:42
    #36968847
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO IF NOT EXIST
Блин

Вот так:
авторПоставь себя на его место и попытайся выполнить
авторSELECT name, score FROM scores where scoreperdays.name <> scores .name
...
Рейтинг: 0 / 0
22.11.2010, 04:43
    #36968849
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO IF NOT EXIST
RwC_LongMan,

Кстати, а что это у тебя кодировка таблиц дефолтная (шведская латиница)? )))
...
Рейтинг: 0 / 0
22.11.2010, 13:32
    #36969570
RwC_LongMan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO IF NOT EXIST
Код: plaintext
INSERT INTO scoreperdays(scoreperdays.name,day1) SELECT scores.name, score FROM scores ON DUPLICATE KEY UPDATE scoreperdays.name=scores.name



Можно еще кое о чем спросить? Если что мб закроют тему...

Мне нужно теперь узнать это:

max(col1, col2) -> конечно синтаксис.. но плз)
...
Рейтинг: 0 / 0
22.11.2010, 13:47
    #36969605
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO IF NOT EXIST
RwC_LongManМне нужно теперь узнать это:

max(col1, col2) -> конечно синтаксис.. но плз) GREATEST()
...
Рейтинг: 0 / 0
22.11.2010, 16:20
    #36970099
RwC_LongMan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO IF NOT EXIST
Спасибо, век не забуду :)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
11.09.2016, 16:43
    #39307222
woojin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO IF NOT EXIST
всем привет!
а вот такой вопрос:
таблица с полем автоиндекса (id) и полем с текстом (text) ("+" полнотекстовая индексация по полю text)
надо добавлять данные которых нет в поле text

как сделать, ума не приложу?
...
Рейтинг: 0 / 0
11.09.2016, 17:25
    #39307230
woojin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INSERT INTO IF NOT EXIST
как можно сделать нечто подобное
Код: sql
1.
2.
3.
INSERT INTO ids (text)
SELECT * FROM (SELECT 'str1', 'str2', 'str3') AS tmp 
  WHERE NOT EXISTS
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / INSERT INTO IF NOT EXIST / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]