:: Visual Foxpro, Foxpro for DOS
Тождественное равенство с подзапросами SQL
Владимир Максимов
Автор

Сообщений: 14098
Откуда: Москва
Дата регистрации: 02.09.2000
Пример:

CREATE CURSOR Tab1 (TabId C(10), NickName C(10))
INSERT INTO Tab1 VALUES ("","a")
INSERT INTO Tab1 VALUES ("","a")
* Как и положено, вот это не сработает
* Подзапрос возвращает более одной записи
UPDATE Tab1 SET TabId=ALLTRIM(TabId)+"1" ;
WHERE NickName = (select NickName from Tab1 WHERE NickName="a")
* А почему работает вот это ?
UPDATE Tab1 SET TabId=ALLTRIM(TabId)+"1" ;
WHERE NickName == (select NickName from Tab1 WHERE NickName="a")

Разница только в использовании символа тождественного равенства. Как-то по разному обрабатывается подзапрос? Почему об этом ничего нет в HELP?

Причем, если тот же самый тест запустить в VFP6SP5, то команда UPDATE обновит каждую запись дважды (!), т.е. _TALLY=4. Хотя в VFP9 ситуацию "исправили". Будет обновлено 2 записи, т.е. _TALLY=2
Ratings: 0 negative/0 positive
Re: Тождественное равенство с подзапросами SQL
grayalex

Сообщений: 249
Откуда: Рыбница
Дата регистрации: 11.01.2006
Действительно, странно.
Почему-то в данном случае == срабатывает как in.


------------------
"И понял я, что непонятен мир..."
Ratings: 0 negative/0 positive
Re: Тождественное равенство с подзапросами SQL
fox-fan

Сообщений: 80
Дата регистрации: 28.10.2005
Наверное это все же какой-то маленький баг..

(Хотя, мне кажется, с подзапросами имеет смысл работать только по целочисленным (автоинкрем.) всяким полям что-то сравнивая и проверяя)
Ratings: 0 negative/0 positive
Re: Тождественное равенство с подзапросами SQL
piva

Сообщений: 18655
Откуда: Курган
Дата регистрации: 24.03.2004
Думаешь ? И только ? а я чета с дуру и по разным другим типам полей использую


------------------
Часто бывает так, что есть над чем задуматься, а нечем.
Ratings: 0 negative/0 positive
Re: Тождественное равенство с подзапросами SQL
fox-fan

Сообщений: 80
Дата регистрации: 28.10.2005
Да это я так заметил (насчет целочисл. полей), естественно в общем случ. можно и нужно исп. в самых различн. случ..
Вообще, вопрос свой Володя адресовал в основном Алексею из MSFT наверное..



Исправлено 1 раз(а). Последнее : fox-fan, 16.04.06 15:05
Ratings: 0 negative/0 positive
Re: Тождественное равенство с подзапросами SQL
piva

Сообщений: 18655
Откуда: Курган
Дата регистрации: 24.03.2004
Добавлю недокументированное
? 2++2
? 2--2
странно что дают один результат ? Это тоже исправим ? Черт - кажись у второго оператора движок 2 минуса отъедает


------------------
Часто бывает так, что есть над чем задуматься, а нечем.




Исправлено 1 раз(а). Последнее : piva, 16.04.06 21:12
Ratings: 0 negative/0 positive
Re: Тождественное равенство с подзапросами SQL
Aleksey Tsingauz [MSFT]

Сообщений: 407
Дата регистрации: 15.06.2004
Владимир Максимов
Пример:
Разница только в использовании символа тождественного равенства. Как-то по разному обрабатывается подзапрос? Почему об этом ничего нет в HELP?

Спасибо, Владимир, баг это, будем исправлять.

Алексей.
Ratings: 0 negative/0 positive
Re: Тождественное равенство с подзапросами SQL
PaulWist

Сообщений: 14618
Дата регистрации: 01.04.2004
Владимир.

А как у тебя получилось, что срабатывает первый UPDATE, у меня на него ругается, что подзапрос содержит больше одной записи.

Правда второй UPDATE отрабатывает корректно.

Хотя на мой взгляд сам "синтаксис", что ли не правилен, по "хорошему" должно быть

UPDATE Tab1 SET TabId=ALLTRIM(TabId)+"1" ;
WHERE NickName = (select top 1 NickName from Tab1 WHERE NickName="a" order by 1)

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

PS VFP9SP1


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Тождественное равенство с подзапросами SQL
Влад Колосов

Сообщений: 22664
Откуда: Ростов-на-Дону
Дата регистрации: 05.05.2005
2Piva почему недокументированное?
К двойке прибавляют плюс двойку, от двойки отнимают минус двойку.


------------------
Совершенство - это не тогда, когда нельзя
ничего прибавить, а тогда, когда нечего убавить.
Ratings: 0 negative/0 positive
Re: Тождественное равенство с подзапросами SQL
Владимир Максимов
Автор

Сообщений: 14098
Откуда: Москва
Дата регистрации: 02.09.2000
PaulWist
Владимир.
А как у тебя получилось, что срабатывает первый UPDATE, у меня на него ругается, что подзапрос содержит больше одной записи.
Так у меня тоже НЕ работает. Почитай внимательно комментарий к первому запросу.

PaulWist
Правда второй UPDATE отрабатывает корректно.
Вот это-то и вызывает недоумение. Почему один и тот же запрос в одном случае НЕ работает, а в другом вдруг начинает исполняться. Разница только в использовании символа тождественного равенства.

PaulWist
Хотя на мой взгляд сам "синтаксис", что ли не правилен ...
Правда не очень понятно тогда, почему отрабатывает второй UPDATE если "синтаксис" не правилен
Конечно не правильный. Это пример, чтобы показать проблему. Теоретически, он должен был ругаться в обоих случаях. Или надо было как-то особо задокументировать логику работы с тождественным равенством.
Ratings: 0 negative/0 positive
Re: Тождественное равенство с подзапросами SQL
PaulWist

Сообщений: 14618
Дата регистрации: 01.04.2004
Цитата:
Так у меня тоже НЕ работает. Почитай внимательно комментарий к первому запросу.

* Как и положено, вот это не сработает
* Подзапрос возвращает более одной записи

Ага, пропустил утром с просонья.


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 16 akvvohinc  (Гостей: 15)

© 2000-2024 Fox Club 
Яндекс.Метрика