Задавайте вопросы, мы ответим
Вы не зашли.
Есть таблица с уникальным индексом по нескольким полям, одно из которых внешний ключ на другую таблицу, причём оно может быть NULL. В таблицу пишутся данные через INSERT ... ON DUPLICATE KEY UPDATE ... .
Проблема в том, что если внешний ключ = NULL, то строка считается уникальной и происходит INSERT, а не UPDATE.
Нашел решение - пишу в поле с внешним ключём вместо NULL - 0. И создал соответствующую запись в таблице, на которую ссылается ключ. Но мне не нравится такое решение, есть ли более правильный путь?
Неактивен
Вы просто неверно сформулировали условие уникальности. Вы хотите,
чтобы уникальными были все поля, кроме тех, которые NULL. Т.е. стол-
бец с NULL у Вас лишний в уникальном индексе
Неактивен
Я, видимо, плохо объяснил)
У меня таблица грубо говоря вида:
дата | внешний ключ 1 | внешний ключ 2 | значение
внешний ключ 2 может быть NULL, уникальность нужна по первым трём полям(дата, внешний ключ 1, внешний ключ 2) и значение с NULL почему-то всегда считается уникальным, в этом проблема. Т.е. с NULL возможно добавить две записи вида
2001-01-01 | 1 | NULL | 10
2001-01-01 | 1 | NULL | 23
это мешает мне при работе с INSERT ON DUPLICATE KEY UPDATE
Неактивен
ok. А почему Вы считаете, что эти строки одинаковые? Какое число
скрывается за NULL? 1? 2? А почему Вы считаете, что так? Мне, напри-
мер, кажется, что в первой строке за NULL стоит 123, а во второй -17.
NULL — это не значение. Это место, куда можно вставить значение.
А вот если Вы потребуете кникальности первых двух полей, то будет
логичная структура.
Также, посмотрев на приведенный пример, у меня сложилось ощущение,
что у Вас просто не нормализована база, и поэтому у Вас возникают ло-
гические противоречия в структуре.
Да, и, наверное, отвечу прямо — NULL не значение, поэтому они всегда
разные, если их рассматривать как значения.
Неактивен
Ок, что-то такое и подозревал, понятно, спасибо за разъяснение. Сделаю третье поле NOT NULL и прицеплю к нему значение по умолчанию.
Неактивен