|
Помогите, пожалуйста, с UPDATE
|
|||
---|---|---|---|
#18+
Имеется три таблицы: 1. Справочник улиц Код: sql 1. 2. 3. 4. 5. 6.
2. Справочник домов, использующий улицы Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
3. И таблица, в которой надо обновить поле `id_mkd` (=id из спр-ка домов) на основании трех полей из нее же: `addr_street`, `addr_building`, `addr_letter` Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Написал так: Код: sql 1. 2. 3. 4.
но > Affected rows: 0 В чем ошибка? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2019, 14:58 |
|
Помогите, пожалуйста, с UPDATE
|
|||
---|---|---|---|
#18+
LiYingВ чем ошибка?В том, что надо читать документацию на используемую СУБД, а не писать запросы по старой привычке. https://dev.mysql.com/doc/refman/8.0/en/update.html Multiple-table syntax И последний пример. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2019, 15:25 |
|
Помогите, пожалуйста, с UPDATE
|
|||
---|---|---|---|
#18+
Akina, ммм, но что писать в WHERE? Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2019, 15:39 |
|
Помогите, пожалуйста, с UPDATE
|
|||
---|---|---|---|
#18+
LiYingчто писать в WHERE? Ну собственно все условия соответствия. Типа Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2019, 16:08 |
|
Помогите, пожалуйста, с UPDATE
|
|||
---|---|---|---|
#18+
Вот такой работает без последнего условия AND (mkd.addr_letter=csv_1.addr_letter) Код: sql 1. 2.
Подозреваю, это из-за того, что `addr_letter` может быть NULL, в то время как другие поля никогда не NULL. И как это победить? Разве проверка AND (NULL=NULL) не равно true? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2019, 16:09 |
|
Помогите, пожалуйста, с UPDATE
|
|||
---|---|---|---|
#18+
Akina, Ваш запрос тоже не сработал, видимо из-за той же проблемы с NULL ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2019, 16:13 |
|
Помогите, пожалуйста, с UPDATE
|
|||
---|---|---|---|
#18+
Akina, А вот так работает. Это корректно или можно/нужно по другому? Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2019, 16:28 |
|
Помогите, пожалуйста, с UPDATE
|
|||
---|---|---|---|
#18+
LiYingА вот так работает.А addr_letter может быть NULL в обеих таблицах? И если в обеих NULL, то это - соответствие? тогда используйте NULL-safe equial оператор: Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2019, 16:58 |
|
Помогите, пожалуйста, с UPDATE
|
|||
---|---|---|---|
#18+
AkinaА addr_letter может быть NULL в обеих таблицах? И если в обеих NULL, то это - соответствие? Да, верно. Оператор <=> работает. В очередной раз благодарю за профессиональную помощь! А можете пояснить, пожалуйста, почему для таблицы csv_2 с 18757 строками и запросом, использующем IFNULL, получается такой explain: А запрос использующий <=>, такой: Почему rows для UPDATE в 1-м случае равно кол-ву строк таблицы, а 2-м всего лишь 71 (и 63*4*71=17892)? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2019, 08:32 |
|
Помогите, пожалуйста, с UPDATE
|
|||
---|---|---|---|
#18+
Простой оператор сравнения (в том числе и NULL-safe) полей может использовать индекс. А если используется функция от поля - нет, выполняется fullscan. Именно поэтому во всех условиях выражения стараются строить от констант, а не от полей. Того же эффекта можно добиться, если в структуру ввести хранимое вычисляемое поле с используемым функциональным выражением, и проиндексировать его. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2019, 08:50 |
|
|
start [/forum/topic.php?fid=47&msg=39855260&tid=1828997]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
146ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 306ms |
total: | 540ms |
0 / 0 |