2 запроса inner join и exists помогите разобраться

shady
Дата: 03.10.2005 09:37:20
пробывал запрос такого типа написать, но работает несовсем корректно, вместо обновления поля date_o=date() только выбранных записей, он обновляет все поле. почему такое может быть?
UPDATE users set date_o=date() WHERE EXISTS (SELECT top " & txt_print.Text & " * From users WHERE REG IN (" & s2 & ") and k_tov1 in (" & s3 & ") and (date >=" + d3 + ") and (date <=" + d4 + ") and IND is not null)

а если пишу такой код:
UPDATE users INNER JOIN (SELECT TOP " & txt_print.Text & " * FROM users WHERE REG IN (" & s2 & ") and k_tov1 IN (" & s3 & ") and (date >=" + d3 + ") and (date <=" + d4 + ") and IND is not null) As Table ON users = Table SET users.date_o=date()

говорит ошибка синтаксиса в предложении FROM

запросы такого типа SELECT TOP " & txt_print.Text & " * FROM users WHERE REG IN (" & s2 & ") and k_tov1 IN (" & s3 & ") and (date >=" + d3 + ") and (date <=" + d4 + ") and IND is not null
работают без ошибок
спасибо.
Тяп-ляп
Дата: 03.10.2005 10:11:25
UPDATE users set date_o=date() WHERE EXISTS ()
На русском языке это означает:
Обнови в таблице users ВЕСЬ столбец date_o на значение date(), если условие, заданное в скобках после WHERE EXISTS выполняется хотя бы для одной записи.
Если условие не выполняется ни для одной из записей, не обновляй.
eGorkaBy
Дата: 03.10.2005 10:22:15
укажите поле по которому объединяете таблицы для второго запроса
ON users.id = Table.id

для первого не видно связи между обновляемой таблицей users и под запроса exists, видимо exists выполняется для всех записей
AndrewNico
Дата: 03.10.2005 10:23:07
Во-первых, предложение EXIST (SELECT ....), при заданных условиях, вероятно всегда возвращает TRUE.

Во-вторых, а зачем такие сложности? Если ты обновляешь ту же таблицу, почему не написать проще, как-нибудь так:

UPDATE users 
SET date_o=date() 
WHERE REG IN (" & s2 & ") 
AND k_tov1 IN (" & s3 & ") 
AND (date BETWEEN " + d3 + " AND " + d4 + ") 
AND IND IS NOT NULL
shady
Дата: 03.10.2005 10:25:49
со вторым понял, а что насчет первого? почему ошибка может быть?
shady
Дата: 03.10.2005 10:28:39
AndrewNico
Во-первых, предложение EXIST (SELECT ....), при заданных условиях, вероятно всегда возвращает TRUE.
Во-вторых, а зачем такие сложности? Если ты обновляешь ту же таблицу, почему не написать проще, как-нибудь так:

вероятно вы необратили внимание на то что мне нужно обновить ТОР записей - это главное условие
shady
Дата: 03.10.2005 10:33:06
eGorkaBy
укажите поле по которому объединяете таблицы для второго запроса
ON users.id = Table.id

указал, но ошибка не исчезла
Ошибка синтаксиса в предложении FROM
AndrewNico
Дата: 03.10.2005 10:46:26
shady
вероятно вы необратили внимание на то что мне нужно обновить ТОР записей - это главное условие


Хорошо, тогда так:

[SRC vba][/SRC]
Iskander68
Дата: 03.10.2005 10:47:03

В Exists бессмысленно указывать, сколько записей нужно отобрать. Обычно там просто звездочку
пишут.

--
Regards
Alexander Artamonov


"shady" <nospam@sql.ru> сообщил/сообщила в новостях следующее: news:1931467@sql.ru...
AndrewNico
Во-первых, предложение EXIST (SELECT ....), при заданных условиях, вероятно всегда
возвращает TRUE.
Во-вторых, а зачем такие сложности? Если ты обновляешь ту же таблицу, почему не написать
проще, как-нибудь так:

вероятно вы необратили внимание на то что мне нужно обновить ТОР записей - это главное
условие
Тема Ответить

Posted via ActualForum NNTP Server 1.3

AndrewNico
Дата: 03.10.2005 10:48:27
shady
вероятно вы необратили внимание на то что мне нужно обновить ТОР записей - это главное условие


Хорошо, тогда так:

UPDATE users 
SET date_o=date() 
WHERE users IN (
SELECT TOP " & txt_print.Text & " * 
FROM users 
WHERE REG IN (" & s2 & ") 
AND k_tov1 IN (" & s3 & ") 
AND (date BETWEEN " + d3 + " AND " + d4 + ") 
AND IND IS NOT NULL
)