2015-09-10 5 views
-2

У меня есть этот запрос в php mysqlстолбец Update со строкой, если t1.column равно t2.column

UPDATE person a, activity b SET value="attended" WHERE a.name = b.name

Он отлично работает на PHP MySQL. Но как я могу выполнить этот запрос в sqlite для Android? Я знаю, как он отличается от подхода, использующего android sqlite.

Что я пробовал это, но он производит ошибку

db.execSQL("UPDATE person a, activity b SET value='attended' WHERE a.name = b.name"); 

Что такое правильный способ для этого запроса? пожалуйста, помогите

Это ошибка, я получаю

Sqlite exception: near "a": syntax error (code 1): while compiling: UPDATE person a, activity b SET value='attended' WHERE a.name = b.name

Так я уже избавился от псевдонимов и использовать этот вместо

db.execSQL("UPDATE person SET value= (SELECT name FROM activity WHERE person.name = acitivty.name"); 

Он возвращает имя обновленных значений.


Он нормально выводит null, если строка не обновлена ​​/ не имеет такого же значения из другой таблицы?

| column | 
------------- 
| Doe, John | 
| null  | 
| null  | 
| null  | 
+0

@ FrankN.Stein Это ошибка. Исключение Sqlite: около «a»: синтаксическая ошибка (код 1): при компиляции: UPDATE person a, activity b SET value = 'visited' WHERE a.name = b.name –

+0

Я думаю, что ошибка заключается в использовании псевдонима. Я не ожидаю в android sqlite, но я думаю, что вы не можете использовать UPDATE TABLE ALIAS, как вы пытаетесь сделать – Stefano

+0

@Stefano Я пробовал это. db.execSQL («UPDATE person SET value = (SELECT name FROM activity WHERE person.name = acitivty.name»), но оно получает только имя, а не значение «посещаемое». Как его обновить, используя строку «Посещенные»? –

ответ

0

SQLite поддерживает только однотабличные update

Запрос может быть преобразован в:

UPDATE person SET value = 'attended' 
WHERE EXISTS (SELECT * FROM activity WHERE activity.name = person.name) 

этот запрос обновляет только те строки, если есть соответствие activity

В качестве альтернативы измененная версия вашего второго запроса:

UPDATE person SET value= (SELECT 'attended' FROM activity WHERE person.name = activity.name) 

обновляет каждую строку либо 'attended', либо null

+0

Почему отображаются другие значения как null, если acitivity.name не равно person.name? –

+0

Я догадался, что неправильно. Я отредактировал первый запрос и добавил второй на основе вашего второго запроса – bwt

+0

оба обработаны штрафом! Я использовал первый. –

0

Вы не можете использовать UPDATE с псевдонимами таким образом.

Удалите псевдонимы или, если вы хотите сохранить их, обязательно соблюдайте правильную грамматику sqlite. Пример синонимов here

Смежные вопросы