:: Visual Foxpro, Foxpro for DOS
SQL-UPDATE "первой" записи
of63
Автор

Сообщений: 25254
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Все просто, этот фоксовый SQL устанавливает "поле" в 1 для WHERE "условие":
UPDATE table SET поле=1 WHERE условие

Вопрос такой: под условие попадает много записей. Как проставить 1 только в "первой" попавшейся под WHERE-условие отбора записей?

Да знаю, что понятие "первая" (или "любая") запись из возможных по критерию "условие" в БД отсутствует, но, допустим, я ORDER установлю, или поставлю SET ENGINEBEHAVIOR 70. Как записать UPDATE-выражение, чтобы изменить только "первую" (попавшуюся, или в ЩКВУК) запись?
Ratings: 0 negative/0 positive
Re: SQL-UPDATE "первой" записи
sphinx

Сообщений: 31180
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Может вот подойдет:


*-- Подготовим тестовый курсор
CREATE CURSOR cur1 (f_name C(20), f_num N(3))
FOR i=1 TO 10
INSERT INTO cur1(f_name, f_num) VALUES (CHR(64+i)+SYS(2015), 10)
ENDFOR
FOR j=1 TO 10
INSERT INTO cur1(f_name, f_num) VALUES (CHR(64+j)+SYS(2015), 20)
ENDFOR
*-- Так курсор выглядит изначально
SELECT cur1
GO TOP
BROWSE
*-- Запишем F_NUM=1 в первую запись из всех упорядоченных F_NAME для F_NUM=1
UPDATE cur1 SET f_num=1 WHERE f_name IN (SELECT TOP 1 f_name FROM cur1 WHERE f_num=10 ORDER BY f_name)
*-- Результат
SELECT cur1
GO TOP
BROWSE


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: SQL-UPDATE "первой" записи
of63
Автор

Сообщений: 25254
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
> SET f_num=1 WHERE f_name IN (SELECT TOP 1 f_name FROM cur1 WHERE f_num=10 ORDER BY f_name)
Непонятно, записи неотличимы, а ты пишешь все тот же WHERE условие, где условие есть:
f_name IN (SELECT TOP 1 f_name FROM cur1 WHERE f_num=10 ORDER BY f_name)
невозможно в принципе отобрать условие "это первая запись", допустим в таблице все записи полностью идентичны.

Доб. надо сделать аналог набора фоксовых:
SET FILTER TO условие
LOCATE && не проверяем FOUND(), что хотя бы одна запись есть, допустим она точно есть
REPLACE поле WITH 1



Исправлено 1 раз(а). Последнее : of63, 22.03.18 19:56
Ratings: 0 negative/0 positive
Re: SQL-UPDATE "первой" записи
sphinx

Сообщений: 31180
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Ключ-то у них есть? Подзапросом выбери ключ ОДНОЙ записи, указав свое условие в WHERE. Ну и обнови запись по ключу. Что смущает?


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: SQL-UPDATE "первой" записи
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
Олег, тебе что, TOP 1 ни о чем не говорит?


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/1 positive
Re: SQL-UPDATE "первой" записи
of63
Автор

Сообщений: 25254
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
TOP 1 говорит, но и WHERE мне тоже говорит. Все записи же идентичны. Сколько не выбери, хоть TOP 1, хоть TOP 100, все равно все записи подойдут под условие IN.

Доб. Просто сам не придумал выражение SQL-SELECT для изменения первой, или просто единственной, записи в таблице с полностью одинаковыми записями. Может такого SQL-выражения в принципе не может быть построено, вот и хочется знать, чтобы дальше не придумывать его...



Исправлено 1 раз(а). Последнее : of63, 22.03.18 20:02
Ratings: 0 negative/0 positive
Re: SQL-UPDATE "первой" записи
of63
Автор

Сообщений: 25254
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
sphinx
Ключ-то у них есть? Подзапросом выбери ключ ОДНОЙ записи, указав свое условие в WHERE. Ну и обнови запись по ключу. Что смущает?
Табличка моя, простая, маленькая. Решение на фоксе банальное. Ключа (ID) каждой записи нет. Вопрос просто принципиальный, можно или нет изменить только "первую" запись таблицы с идентичными записями SQL-UPDATE фоксовым кодом
Ratings: 0 negative/0 positive
Re: SQL-UPDATE "первой" записи
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
of63
TOP 1 говорит, но и WHERE мне тоже говорит.
И что: Ну и что, что под условие подходит несколько записей?
Цитата:
Все записи же идентичны. Сколько не выбери, хоть TOP 1, хоть TOP 100, все равно все записи подойдут под условие IN.
И что это меняет? Тебе надо выбрать и обновить одну запись или тебе надо именно условие придумать на получение одной записи из одинаковых?
Батенька, вы несете какую-то ахинею...


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: SQL-UPDATE "первой" записи
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
of63
sphinx
Ключ-то у них есть? Подзапросом выбери ключ ОДНОЙ записи, указав свое условие в WHERE. Ну и обнови запись по ключу. Что смущает?
Табличка моя, простая, маленькая. Решение на фоксе банальное. Ключа (ID) каждой записи нет. Вопрос просто принципиальный, можно или нет изменить только "первую" запись таблицы с идентичными записями SQL-UPDATE фоксовым кодом
Первую по какому порядку? Что есть первая запись из множества одинаковых?

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: SQL-UPDATE "первой" записи
of63
Автор

Сообщений: 25254
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Да, первую попавшуюся мне и нужно изменить. Принципиальным для проверяющих эту таблицу является количество записей с "поле=1", и не важно в какой записи. Например, в магазине 100 консервных банок, одинаковых, одна разбилась. В таблице банок надо проставить на одной из банок признак "разбилась". Как это сделать, если исходная инфа "известно что 1 банка разбилась", и "в таблице 100 одинаковых банок"

> Батенька, вы несете какую-то ахинею...
"Тоже мне сыночечек" (с)



Исправлено 2 раз(а). Последнее : of63, 22.03.18 20:16
Ratings: 0 negative/0 positive
Re: SQL-UPDATE "первой" записи
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
of63
Да, первую попавшуюся мне и нужно изменить.
надо говорить не "первую попавшуюся", а "одну любую".
Цитата:
Принципиальным для проверяющих эту таблицу является количество записей с "поле=1", и не важно в какой записи. Например, в магазине 100 консервных банок, одинаковых, одна разбилась. В таблице банок надо проставить на одной из банок признак "разбилась". Как это сделать, если исходная инфа "известно что 1 банка разбилась", и "в таблице 100 одинаковых банок"
НУ и? Чем не подходят предложенные варианты? Что не так?

------------------
Лень - это неосознанная мудрость.




Исправлено 1 раз(а). Последнее : ssa, 22.03.18 20:15
Ratings: 0 negative/0 positive
Re: SQL-UPDATE "первой" записи
sphinx

Сообщений: 31180
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
of63
Ключа (ID) каждой записи нет.Ключа (ID) каждой записи нет.

Таки совсем-совсем? А не пробовал его получить через SYS(2017) или через свой мега-алгоритм для получения хэша/контрольной суммы записи?


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: SQL-UPDATE "первой" записи
of63
Автор

Сообщений: 25254
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
> НУ и? Чем не подходят предложенные варианты? Что не так?
> Таки совсем-совсем? А не пробовал его получить через SYS(2017) или через свой мега-алгоритм для получения хэша/контрольной суммы записи?
Все ясно... Все записи одинаковы. Как найти "первую попавшуюся", "любую", но одну. Как построить выражение WHERE в UPDATE ? (Ну, вы тупые...)
Вы таблицу без автоинкрементного ID, совсем без ID, совсем забыли, и не знаете как с ней обращаться? leonid что-то строил при помощи RECNO (да это можно), но на нефоксовое SQL-WHERE-выражение можно построить "любая запись", или нельзя ?! )



Исправлено 1 раз(а). Последнее : of63, 22.03.18 20:21
Ratings: 0 negative/0 positive
Re: SQL-UPDATE "первой" записи
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
sphinx
of63
Ключа (ID) каждой записи нет.Ключа (ID) каждой записи нет.

Таки совсем-совсем? А не пробовал его получить через SYS(2017) или через свой мега-алгоритм для получения хэша/контрольной суммы записи?
У абсолютно одинаковых записей? Саш, подумать не пробавал? В конце концов есть такой любимый некоторыми RecNo().


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: SQL-UPDATE "первой" записи
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
of63
> НУ и? Чем не подходят предложенные варианты? Что не так?
> Таки совсем-совсем? А не пробовал его получить через SYS(2017) или через свой мега-алгоритм для получения хэша/контрольной суммы записи?
Все ясно... Все записи одинаковы. Как найти "первую попавшуюся", "любую", но одну. Как построить выражение WHERE в UPDATE ?
Еще раз, для не тупых - никак. Для этого есть TOP 1. При ЛЮБЫХ условиях.
Цитата:
(Ну, вы тупые...)
НУ, это еще большой вопрос кто тут тупой...

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: SQL-UPDATE "первой" записи
sphinx

Сообщений: 31180
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
of63
В таблице банок надо проставить на одной из банок признак "разбилась". Как это сделать, если исходная инфа "известно что 1 банка разбилась", и "в таблице 100 одинаковых банок" В таблице банок надо проставить на одной из банок признак "разбилась". Как это сделать, если исходная инфа "известно что 1 банка разбилась", и "в таблице 100 одинаковых банок"

Хорошо. Давай свои данные "с банками" и что там у тебя обновить надо.


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: SQL-UPDATE "первой" записи
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
И ксерокопию кредитки на всякий случай. [sm128]
Ratings: 0 negative/0 positive
Re: SQL-UPDATE "первой" записи
of63
Автор

Сообщений: 25254
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
ладно... UPDATE TOP 1 SET поле=1 WHERE - так можно ?
Ratings: 0 negative/0 positive
Re: SQL-UPDATE "первой" записи
sphinx

Сообщений: 31180
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
ssa
У абсолютно одинаковых записей? Саш, подумать не пробавал? В конце концов есть такой любимый некоторыми RecNo().У абсолютно одинаковых записей? Саш, подумать не пробавал? В конце концов есть такой любимый некоторыми RecNo().

Я под мега-алгоритмом и понимал, что там можно смикшировать и с RECNO() в том числе.
Хотя согласен, ляпнул не подумав.


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: SQL-UPDATE "первой" записи
of63
Автор

Сообщений: 25254
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
sphinx
of63
В таблице банок надо проставить на одной из банок признак "разбилась". Как это сделать, если исходная инфа "известно что 1 банка разбилась", и "в таблице 100 одинаковых банок" В таблице банок надо проставить на одной из банок признак "разбилась". Как это сделать, если исходная инфа "известно что 1 банка разбилась", и "в таблице 100 одинаковых банок"

Хорошо. Давай свои данные "с банками" и что там у тебя обновить надо.
банка супа у меня кончилась, кстати, 0.7, майонезная, от 30.11.2017, обновляй, че, я не против \)
Ratings: 0 negative/0 positive


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

On-line: 25 (Гостей: 25)

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