for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Лисоводы   всех   стран,  объединяйтесь !!!  

Список Форумов  :: Visual Foxpro, Foxpro for DOS
  

Тождественное равенство с подзапросами SQL
Владимир Максимов
Автор

Сообщений: 13944
Откуда: Москва
Дата: 14.04.06 23:43:25
Пример:

  
  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
Откуда: Рыбница
Дата: 15.04.06 01:12:06
Действительно, странно.
Почему-то в данном случае == срабатывает как in.


------------------
"И понял я, что непонятен мир..."
Ratings: 0 negative/0 positive

Re: Тождественное равенство с подзапросами SQL
fox-fan

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

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

Re: Тождественное равенство с подзапросами SQL
piva

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


------------------
Часто бывает так, что есть над чем задуматься, а нечем.
Ratings: 0 negative/0 positive

Re: Тождественное равенство с подзапросами SQL
fox-fan

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



Исправлено: fox-fan, 16.04.06 15:05
Ratings: 0 negative/0 positive

Re: Тождественное равенство с подзапросами SQL
piva

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


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




Исправлено: piva, 16.04.06 21:12
Ratings: 0 negative/0 positive

Re: Тождественное равенство с подзапросами SQL
Aleksey Tsingauz [MSFT]

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

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

Алексей.
Ratings: 0 negative/0 positive

Re: Тождественное равенство с подзапросами SQL
PaulWist

Сообщений: 14093
Дата: 17.04.06 10:43:03
Владимир.

А как у тебя получилось, что срабатывает первый 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
Откуда: Ростов-на-Дону
Дата: 17.04.06 13:45:00
2Piva почему недокументированное?
К двойке прибавляют плюс двойку, от двойки отнимают минус двойку.


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

Re: Тождественное равенство с подзапросами SQL
Владимир Максимов
Автор

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

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

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

Re: Тождественное равенство с подзапросами SQL
PaulWist

Сообщений: 14093
Дата: 18.04.06 09:29:29
Цитата:
Так у меня тоже НЕ работает. Почитай внимательно комментарий к первому запросу.

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

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


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



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

On-line: 4 _vit  (Гостей: 3)

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