powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запросик
16 сообщений из 16, страница 1 из 1
Запросик
    #32464969
vinni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня есть база допустим из четырех полей

prizn
kmb
fcode
year

поле prizn может иметь два значения 2 и 3

так вот нужно сделать запрос, чтобы из этой базы удалилась запись с двойкой если есть такая запись с 3. Совпадение должно быть однозначное по трем последним полям
...
Рейтинг: 0 / 0
Запросик
    #32465053
Фотография Deminik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
DELETE Таблица1.prizn, Таблица1.kmb, Таблица1.fcode, Таблица1.year
FROM Таблица1
WHERE Таблица1.prizn= 2  
  and Таблица1.kmb  in(select Таблица1.kmb from  Таблица1 where  Таблица1.prizn= 3 ) 
  and Таблица1.fcode  in(select Таблица1.fcode from  Таблица1 where  Таблица1.prizn= 3 ) 
  and Таблица1.year  in(select Таблица1.year from  Таблица1 where  Таблица1.prizn= 3 );


Наверняка, кто-нибудь скажет - как сделать покороче...
...
Рейтинг: 0 / 0
Запросик
    #32465103
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНаверняка, кто-нибудь скажет - как сделать покороче...
Не знаю насчет покороче, но твой запрос не подходит по условию.
Вместо "однозначного совпадения по трем последним полям", у тебя удаляться все записи с 2, если есть есть
- хоть одна запись с 3 и таким же kmb,
- хоть одна запись с 3 и таким же fcode,
- хоть одна запись с 3 и таким же year.

Правильнее так:

Код: plaintext
1.
2.
delete * 
from mytable left join mytable as t on t.prizn= 3  and t.kmb=mytable.kmb and t.fcode=mytable.fcode and t.year=mytable.year
where t.prizn is not null

(не проверял, мб понадобиться какие-нибудь скобки расставить в условиях)
...
Рейтинг: 0 / 0
Запросик
    #32465126
Фотография Deminik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GEOНе знаю насчет покороче, но твой запрос не подходит по условию.
Вместо "однозначного совпадения по трем последним полям", у тебя удаляться все записи с 2, если есть есть
- хоть одна запись с 3 и таким же kmb,
- хоть одна запись с 3 и таким же fcode,
- хоть одна запись с 3 и таким же year.

Только что все переправерил по твоим замечаниям - оказались неверными...
Все работает, как дано в задании...
Проверь у себя...
...
Рейтинг: 0 / 0
Запросик
    #32465141
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
prizn	kmb	fcode	year
 3 	 10 	 0 	 0 
 3 	 0 	 11 	 0 
 3 	 0 	 0 	 12 
 2 	 10 	 11 	 12 

Твой запрос удаляет последнюю запись.
Заодно и свой проверил:
DELETE *
FROM Таблица1 LEFT JOIN Таблица1 AS t ON ((t.prizn=3) and (t.kmb=Таблица1.kmb) and (t.fcode=Таблица1.fcode) and (t.year=Таблица1.year))
WHERE t.prizn is not null and Таблица1.prizn=2;
...
Рейтинг: 0 / 0
Запросик
    #32465150
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой, вру...
...
Рейтинг: 0 / 0
Запросик
    #32465163
Фотография Лифчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сегодня можно
...
Рейтинг: 0 / 0
Запросик
    #32465167
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DELETE Таблица1.*
FROM Таблица1
WHERE ((Таблица1.prizn)=2) and
Exists (select * from Таблица1 AS t where t.prizn=3 and t.kmb=Таблица1.kmb and t.fcode=Таблица1.fcode and t.year=Таблица1.year);
...
Рейтинг: 0 / 0
Запросик
    #32465169
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Лифчик


2Deminik
Врал только насчет работоспособности своего :)
...
Рейтинг: 0 / 0
Запросик
    #32465647
Фотография Deminik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 GEO

Проверил - действительно вру...
До этого я проверял только в текстовом формате - и все прекрасно работало...
А с твоим числовым примером - не работает...
И все же я не до конца соображаю: везде же AND стоит...
Разъясни, если не затруднит...
...
Рейтинг: 0 / 0
Запросик
    #32465934
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторДо этого я проверял только в текстовом формате - и все прекрасно работало...

Вот из этой таблицы твой запрос тоже удалил последнюю запись:

Код: plaintext
1.
2.
3.
4.
prizn	kmb	fcode	year
 3 	a		
 3 		b	
 3 			c
 2 	a	b	c


авторРазъясни, если не затруднит...

> DELETE Таблица1.prizn, Таблица1.kmb, Таблица1.fcode, Таблица1.year
УДАЛИТЬ

>FROM Таблица1
ЗАПИСИ ИЗ Таблицы1

>WHERE Таблица1.prizn=2
В КОТОРЫХ поле prizn=2

> and Таблица1.kmb in(select Таблица1.kmb from Таблица1 where Таблица1.prizn=3)
и есть хоть одна запись в запросе (select Таблица1.kmb from Таблица1 where Таблица1.prizn=3) с таким же значением поля kmb

> and Таблица1.fcode in(select Таблица1.fcode from Таблица1 where Таблица1.prizn=3)
и есть хоть одна запись в запросе (select Таблица1.fcode from Таблица1 where Таблица1.prizn=3) с таким же значением поля fcode

> and Таблица1.year in(select Таблица1.year from Таблица1 where Таблица1.prizn=3);
и есть хоть одна запись в запросе (select Таблица1.year from Таблица1 where Таблица1.prizn=3) с таким же значением поля year
...
Рейтинг: 0 / 0
Запросик
    #32465937
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вот вариант с группировкой
Код: plaintext
1.
2.
3.
4.
5.
DELETE TT.prizn 
FROM TVinni AS TT
WHERE TT.prizn= 2  AND 
(SELECT  Count(*)   FROM TVinni Where TVinni.kmb=TT.kmb and TVinni.fcode=TT.fcode and TVinni.year=TT.year 
GROUP BY TVinni.kmb, TVinni.fcode, TVinni.year)= 2 
...
Рейтинг: 0 / 0
Запросик
    #32465947
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автора вот вариант с группировкой
И тоже нерабочий... Удалил обе записи (других в таблице не было).

Код: plaintext
1.
2.
prizn	kmb	fcode	year
 2 	a	b	c
 2 	a	b	c
...
Рейтинг: 0 / 0
Запросик
    #32465949
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А отсюда, соответственно, ни одной:
Код: plaintext
1.
2.
3.
prizn	kmb	fcode	year
 2 	a	b	c
 3 	a	b	c
 3 	a	b	c
...
Рейтинг: 0 / 0
Запросик
    #32466115
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорру полагал что 4-ре поля дают ключ
...
Рейтинг: 0 / 0
Запросик
    #32466301
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
delete * from
test where prizn & f1 & f2 & f3 in(
SELECT prizn & f1 & f2 & f3
 FROM [SELECT test.prizn, test.f1, test.f2, test.f3
FROM test INNER JOIN test AS test_1 ON (test.f3 = test_1.f3) AND (test.f2 = test_1.f2) AND (test.f1 = test_1.f1) 
where test.prizn= 2  and test_1.prizn= 3 
union
select  test_1.prizn, test_1.f1, test_1.f2, test_1.f3
FROM test INNER JOIN test AS test_1 ON (test.f3 = test_1.f3) AND (test.f2 = test_1.f2) AND (test.f1 = test_1.f1) 
where test.prizn= 2  and test_1.prizn= 3 ]. AS [a]);
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запросик
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]