LINUX.ORG.RU

Что не правильно в запросе ?

 , ,


0

1
MariaDB [bookbiz]> UPDATE titles 
SET price = price * 2 
FROM titles, publishers 
WHERE titles.pub_id = publishers.pub_id 
AND pub_name = 'New Age Books';

out:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the
right syntax to use near 'FROM titles, publishers WHERE titles.pub_id = publishers.pub_id AND pub_name = '' at line 1


Ответ на: комментарий от Xwo

Хотя не, работает

UPDATE table1, table2, ... 
SET column1 = expression1,
    column2 = expression2,
    ...
WHERE table1.column = table2.column
AND conditions;

Xwo
() автор топика
Ответ на: комментарий от Xwo

В смысле с JOIN? Должно работать, типа UPDATE t1 INNER JOIN t2 ON t1.id = t2.id SET ... Проверять лень, базы под рукой нет.

JaneDoe
()
Ответ на: комментарий от Xwo

Что-то мне подсказывает, что под «объединением» ты не это имеешь в виду. Если под «объединением» ты понимаешь тот мусор, что в первом посте - напрашивается вопрос: ты сам-то понимаешь чего ты хочешь от БД? Просто напиши по-русски что база должна сделать, переведи на английский и получишь текст своего сиквела. Попробуй вот прямо сейчас.

anonymous
()
Ответ на: комментарий от anonymous

В книге есть два примера. Первый отработал корректно, второй нет. Вот пытаюсь понять почему.

MariaDB [bookbiz]> UPDATE titles
    -> SET price = price * 2
    -> WHERE pub_id IN
    ->     (SELECT pub_id
    ->     FROM publishers
    ->     WHERE pub_name = 'New Age Books');

Эквивалентный оператор UPDATE, в котором используется объединение(для систем, которые допускают наличие предложения FROM в операторе UPDATE) имеют следующий вид

MariaDB [bookbiz]> UPDATE titles
     -> SET price = price * 2
     -> FROM titles, publishers
     -> WHERE titles.pub_id = publishers.pub_id
     -> AND pub_name = 'New Age Books';

Xwo
() автор топика
Ответ на: комментарий от Xwo

Ладно, если ты не в состоянии по-русски сформулировать что ты хочешь от базы, я сам за тебя попробую.

«я хочу обновить titles так чтобы удвоилась цена только для тех записей, паблишером которых является New Age Books»

Теперь переводим (опуская фазу перевода на английский, переводим сразу на сикуэльский):

«я хочу обновить titles» = UPDATE titles

«так чтобы удвоилась цена» = SET price = price * 2

«только для тех записей, паблишером которых является New Age Books» = WHERE titles.pub_id in (SELECT pub_id FROM publishers WHERE pub_name = 'New Age Books')

Всё вместе:

UPDATE titles
  SET price = price * 2
  WHERE titles.pub_id in (SELECT pub_id FROM publishers WHERE pub_name = 'New Age Books')

Так работает?

anonymous
()
Ответ на: комментарий от goingUp
MariaDB [bookbiz]> UPDATE titles SET price = price * 2 WHERE titles.pub_id = publishers.pub_id AND pub_name = 'New Age Books';

out:

ERROR 1054 (42S22): Unknown column 'publishers.pub_id' in 'where clause'

Xwo
() автор топика
Ответ на: комментарий от anonymous
MariaDB [bookbiz]> UPDATE titles
    -> SET price = price * 2
    -> WHERE pub_id IN
    ->     (SELECT pub_id
    ->     FROM publishers
    ->     WHERE pub_name = 'New Age Books');

Это твое не похоже на первый пример, не ?

Xwo
() автор топика
Ответ на: комментарий от Xwo
UPDATE titles, publishers
SET price = price * 2
WHERE titles.pub_id = publishers.pub_id AND pub_name = 'New Age Books';

или

UPDATE titles INNER JOIN publishers
ON titles.pub_id = publishers.pub_id
SET price = price * 2
WHERE publishers.pub_name = 'New Age Books';

JaneDoe
()
Ответ на: комментарий от Xwo

Это твое не похоже на первый пример, не ?

Не понял, в чём проблема? Почему оно должно быть похоже?

anonymous
()
Ответ на: комментарий от Xwo

Эквивалентный оператор UPDATE, в котором используется объединение(для систем, которые допускают наличие предложения FROM в операторе UPDATE)

MS SQL это допускает, может еще кто. Но не мускуль с машей.

JaneDoe
()
Ответ на: комментарий от Xwo

Тебе курсовик сдать «на отъебись» или ты планируешь и дальше промышлять написанием сикуэлей?

anonymous
()
Ответ на: комментарий от Xwo

Вот прямо так и посдавал с неработающими запросами? Как бы не пришлось после нового года пересдавать идти.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.