Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
21 / 21 / 8
Регистрация: 07.01.2009
Сообщений: 556
1
MS Access

Удалить товар, который есть только в удаляемой подкатегории

23.10.2017, 09:28. Показов 973. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Delphi SQL ADO ACCESS
Удаляю подкатегорию, вместе с ней нужно удалить все товары, которые есть в этой категории, но:
если какой-то из товаров присутствует в других категориях, то его не нужно удалять.
Как это сделать?
Просто удалять товары удаляемой подкатегории я могу легко, так:
Delphi
1
2
3
                qry1.SQL.text:='delete from tovars where tovars.N in (';
                qry1.SQL.Add('select tovar from tovar_sv where (podkat=:pr0) and (kat=:pr1)');
                qry1.SQL.Add(')');
А вот как оставить те товары, которые есть в других подкатегориях?
Я пытался так:
Delphi
1
2
3
                qry1.SQL.text:='delete from tovars where tovars.N in (';
                qry1.SQL.Add('select tovar from tovar_sv where (podkat=:pr0) and (kat=:pr1) and Count(tovar)=1');
                qry1.SQL.Add(')');
Но это, конечно же неправильно.
С distinct тоже не получится никак.
Как можно придумать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.10.2017, 09:28
Ответы с готовыми решениями:

Создать триггер, который выводит номер удаляемой строки
Необходимо написать триггер, который выводит номер удаляемой строки. Так как я в sql не силен,...

Найти те магазины, где есть только 1 товар, все товары
Прошу помочь найти ссылку на задачу. (примерное условие) В 3-х магазинах имеются товары: молоко,...

Необходимо чтобы когда товар появился, то строка с пользователем, у которого есть этот товар, подсветилась
есть таблица с подпиской на товар |Пользователь | Дата добавления | Дата изменения | Количество...

Есть Grid и элементы в нем, и код который их изменяет, но выводить только конечный результат
Я хочу динамически изменять Лабиринт по прохождении времени/действий. Но изменения видны только при...

20
5489 / 4404 / 1076
Регистрация: 29.08.2013
Сообщений: 27,600
Записей в блоге: 3
23.10.2017, 10:39 2
вывести товар и количество категорий
там где категория 1 - удалить
0
21 / 21 / 8
Регистрация: 07.01.2009
Сообщений: 556
23.10.2017, 11:52  [ТС] 3
Видимо, для этого можно применить "IF" в запросе.
Сейчас почитаю учебники и поучусь использовать этот оператор в запросах.
0
5489 / 4404 / 1076
Регистрация: 29.08.2013
Сообщений: 27,600
Записей в блоге: 3
23.10.2017, 12:15 4
какой еще IF?//

обычный DELETE в запросе с условием

Добавлено через 1 минуту
ЗЫ кстати, товары никогда не удаляют. даже те которые уже не возят и никогда не будут
висят они себе в таблице и все

а знаешь почему?
0
21 / 21 / 8
Регистрация: 07.01.2009
Сообщений: 556
23.10.2017, 13:13  [ТС] 5
Цитата Сообщение от qwertehok Посмотреть сообщение
ЗЫ кстати, товары никогда не удаляют. даже те которые уже не возят и никогда не будут
висят они себе в таблице и все
а знаешь почему?
Чтобы не нарушилась целостность по тем товарам, которые использовались ранее.
У меня, когда пользователь удаляет подкатегорию, программа удаляет из истории все покупки.
А потом пользователю предоставляется выбор.
При удалении подкатегории программа спрашивает не хочет ли он удалить и товары по удаляемой подкатегории.
Вдруг кто-то захочет избавиться от моих корявых названий в демонстрационной базе.

Добавлено через 10 минут
Цитата Сообщение от qwertehok Посмотреть сообщение
вывести товар и количество категорий
там где категория 1 - удалить
Не получается.
Если делать так:
SQL
1
2
3
4
IF COUNT(SELECT tovar FROM tovar_sv WHERE (podkat=:pr0) AND (kat=:pr1))=1
DELETE FROM tovars WHERE tovars.N IN (
SELECT tovar FROM tovar_sv WHERE (podkat=:pr0) AND (kat=:pr1)
)
то работать будет лишь в том случае, если в подкатегории есть только один товар.
А если в подкатегории 10 разных товаров, то они не удалятся.
0
5489 / 4404 / 1076
Регистрация: 29.08.2013
Сообщений: 27,600
Записей в блоге: 3
23.10.2017, 16:33 6
построй запрос
товар | количество категорий

Добавлено через 44 секунды
и что за таблица tovars?
что в ней хранится?
0
21 / 21 / 8
Регистрация: 07.01.2009
Сообщений: 556
23.10.2017, 18:12  [ТС] 7
Цитата Сообщение от qwertehok Посмотреть сообщение
и что за таблица tovars?
что в ней хранится?
Там только названия товаров.
У меня могут быть свои названия в ознакомительной базе (пивко, винцо), а пользователь может захотеть всё очистить, чтобы потом свои названия постепенно вводить.
Цитата Сообщение от qwertehok Посмотреть сообщение
построй запрос
товар | количество категорий
Сейчас попытаюсь придумать, как это сделать.

Добавлено через 55 минут
Цитата Сообщение от qwertehok Посмотреть сообщение
построй запрос
товар | количество категорий
Я понимаю как это сделать только для одного товара:
SQL
1
SELECT COUNT(tovar) FROM tovar_sv WHERE tovar=:pr1
Но мне же надо для каждого товара, получается, а не для одного.
0
5489 / 4404 / 1076
Регистрация: 29.08.2013
Сообщений: 27,600
Записей в блоге: 3
23.10.2017, 19:04 8
Цитата Сообщение от pivogol Посмотреть сообщение
Там только названия товаров.
тогда это таблица Ассортимент
нет в английском слова tovars, потому что ТОВАР\Ы это на русском

Цитата Сообщение от pivogol Посмотреть сообщение
Я понимаю как это сделать только для одного товара:
тебе в SELECT нужно вывести названия и количество - зачем ты WHERE используешь?
так же ты забыл про группировку
0
21 / 21 / 8
Регистрация: 07.01.2009
Сообщений: 556
23.10.2017, 19:33  [ТС] 9
Цитата Сообщение от qwertehok Посмотреть сообщение
так же ты забыл про группировку
Не то что забыл, просто я плохо умею этим пользоваться.
Могу только сделать, чтобы что-то шло вместе по группам.
Буду изучать потихоньку group by.
Цитата Сообщение от qwertehok Посмотреть сообщение
нет в английском слова tovars, потому что ТОВАР\Ы это на русском
Я ж для русских пишу программу
0
5489 / 4404 / 1076
Регистрация: 29.08.2013
Сообщений: 27,600
Записей в блоге: 3
23.10.2017, 20:21 10
Цитата Сообщение от pivogol Посмотреть сообщение
Я ж для русских пишу программу
русские твои таблицы и не увидят, а в MSSQL можно называть таблицы и поля по русски
тут не надо придумывать ylicy или tovars - или Street\Assortment или Улицы\Ассортимент


Цитата Сообщение от pivogol Посмотреть сообщение
Не то что забыл, просто я плохо умею этим пользоваться.
чем? запросами? а как же ты тогда БД пишешь?

SQL
1
2
3
SELECT a, COUNT(a)
FROM t
GROUP BY a
лучше удалять по коду товара (лучше вообще не удалять)

Цитата Сообщение от pivogol Посмотреть сообщение
У меня могут быть свои названия в ознакомительной базе (пивко, винцо), а пользователь может захотеть всё очистить, чтобы потом свои названия постепенно вводить.
в интерфейсе админа предусмотри кнопку - очистки базы. останутся только служебные справочники, а остальное под 0
0
21 / 21 / 8
Регистрация: 07.01.2009
Сообщений: 556
23.10.2017, 21:43  [ТС] 11
Цитата Сообщение от qwertehok Посмотреть сообщение
чем? запросами?
Нет, я с group by знаю мало вариантов использования. До этого применял эту фишку, чтобы товары шли вместе, рядом.
Цитата Сообщение от qwertehok Посмотреть сообщение
а как же ты тогда БД пишешь?
Я их раз в год пишу, когда подходящей бесплатной программы не нахожу в интернете.
Цитата Сообщение от qwertehok Посмотреть сообщение
в интерфейсе админа предусмотри кнопку - очистки базы. останутся только служебные справочники, а остальное под 0
Да, сделал два варианта: полную очистку базы и очистку только таблицы расходов.
Цитата Сообщение от qwertehok Посмотреть сообщение
лучше удалять по коду товара (лучше вообще не удалять)
Просто мои названия товаров не всем могут понравиться.
Цитата Сообщение от qwertehok Посмотреть сообщение
SELECT a, COUNT(a)
FROM t
GROUP BY a
Я так и думал.
Сгруппировать легко. А как из этого выбрать те товары, которые встречаются только 1 раз?
Я делал так:
SQL
1
2
3
SELECT tovar FROM tovar_sv WHERE (
SELECT tovar , COUNT(tovar) FROM tovar_sv GROUP BY tovar
)=1
Понимаю, что так неправильно.
А как правильно - не знаю.
Без скобок - тоже неправильно.
Можно попробовать использовать as, но не пойму как тогда делать два разных запроса в одном.

Добавлено через 9 минут
Попробовал так:
Delphi
1
2
                qry1.SQL.text:='select tovar from tovar_sv where count1=1';
                qry1.SQL.Add('(select tovar, count(tovar) as count1 from tovar_sv group by tovar)');
Тоже не работает, конечно
0
5489 / 4404 / 1076
Регистрация: 29.08.2013
Сообщений: 27,600
Записей в блоге: 3
23.10.2017, 21:46 12
Цитата Сообщение от pivogol Посмотреть сообщение
Сгруппировать легко. А как из этого выбрать те товары, которые встречаются только 1 раз?
еще раз повторяю - напиши запрос
товар| в скольких категориях он есть (число)

тогда там где стоит 1 - можешь смело удалять

а это
Цитата Сообщение от pivogol Посмотреть сообщение
SELECT tovar FROM tovar_sv WHERE ( SELECT tovar , COUNT(tovar) FROM tovar_sv GROUP BY tovar )=1
какой то бред

Цитата Сообщение от pivogol Посмотреть сообщение
Просто мои названия товаров не всем могут понравиться.
я тебе о том что в базе название товара вторично - главное КОД товара
по нему и поиск быстрее и запоминать цифры легче
0
21 / 21 / 8
Регистрация: 07.01.2009
Сообщений: 556
23.10.2017, 21:51  [ТС] 13
Цитата Сообщение от qwertehok Посмотреть сообщение
еще раз повторяю - напиши запрос
товар| в скольких категориях он есть (число)
Это элементарно.
SQL
1
SELECT tovar , COUNT(tovar) FROM tovar_sv GROUP BY tovar
Цитата Сообщение от qwertehok Посмотреть сообщение
тогда там где стоит 1 - можешь смело удалять
Как?
Цитата Сообщение от qwertehok Посмотреть сообщение
какой то бред
Да, знаю
Цитата Сообщение от qwertehok Посмотреть сообщение
я тебе о том что в базе название товара вторично - главное КОД товара
по нему и поиск быстрее и запоминать цифры легче
Да, в таблице tovar_sv у меня только коды.
0
5489 / 4404 / 1076
Регистрация: 29.08.2013
Сообщений: 27,600
Записей в блоге: 3
23.10.2017, 21:55 14
Цитата Сообщение от pivogol Посмотреть сообщение
Это элементарно.
да нет же

Цитата Сообщение от pivogol Посмотреть сообщение
SELECT tovar , COUNT(tovar)
выведет тебе наименование и количество, если у тебя дублей товара нет, то всегда будет 1
0
21 / 21 / 8
Регистрация: 07.01.2009
Сообщений: 556
23.10.2017, 22:09  [ТС] 15
Цитата Сообщение от qwertehok Посмотреть сообщение
SQL
1
SELECT tovar , COUNT(tovar)
выведет тебе наименование и количество, если у тебя дублей товара нет, то всегда будет 1
Я это понимаю.
Но у меня часто товар будет не в одной, а в нескольких подкатегориях.
Этот запрос может показать, что товар встречается более одного раза в категориях, значит удалять не нужно.
И когда это так - его нужно оставить, не удалять.
И как у казать, что если 1 - то выбирать (удалять) такие значения, а если больше чем один, то не нужно?
Я не могу использовать эту строку ни после if, ни после where, т.к. в условиях условий нужно писать одно поле, а это выбирает два.

Такие варианты не прокатят:
SQL
1
IF (SELECT tovar , COUNT(tovar) FROM tovar_sv GROUP BY tovar)=1 ...
SQL
1
WHERE (SELECT tovar , COUNT(tovar) FROM tovar_sv GROUP BY tovar)=1 ...
0
5489 / 4404 / 1076
Регистрация: 29.08.2013
Сообщений: 27,600
Записей в блоге: 3
23.10.2017, 22:18 16
Цитата Сообщение от pivogol Посмотреть сообщение
И как у казать, что если 1 - то выбирать (удалять) такие значения, а если больше чем один, то не нужно?
Я не могу использовать эту строку ни после if, ни после where, т.к. в условиях условий нужно писать одно поле, а это выбирает два.
хватит как школьник подбирать ответ к задаче. нельзя подбором написать запрос.
есть синтаксис - он описан в мануалах. не умеешь, читай

Цитата Сообщение от pivogol Посмотреть сообщение
Но у меня часто товар будет не в одной, а в нескольких подкатегориях.
при чем тут подкатегории и ассортимент? - в таблице ассортимент код товара уникален

далее уже делай свои группы как хочешь
id | код товара | код группы

вот в этой таблице твои товары соединяются с подкатегорией. и уже ТУТ ты считаешь сколько у товара групп
0
21 / 21 / 8
Регистрация: 07.01.2009
Сообщений: 556
23.10.2017, 22:24  [ТС] 17
О, может надо копать в сторону having ...
Ща посуду помою и поэкспериментирую.

Добавлено через 2 минуты
Цитата Сообщение от qwertehok Посмотреть сообщение
вот в этой таблице твои товары соединяются с подкатегорией. и уже ТУТ ты считаешь сколько у товара групп
Да, у меня это таблица связей: tovar_sv, тут я подсчитал сколько раз встречается каждый товар в связях.
И как мне после подсчёта использовать только те товары, которых 1 штука в таблице связей?
0
5489 / 4404 / 1076
Регистрация: 29.08.2013
Сообщений: 27,600
Записей в блоге: 3
23.10.2017, 22:26 18
Цитата Сообщение от pivogol Посмотреть сообщение
И как мне после подсчёта использовать только те товары, которых 1 штука в таблице связей?
по коду товара конечно
0
21 / 21 / 8
Регистрация: 07.01.2009
Сообщений: 556
23.10.2017, 23:01  [ТС] 19
Цитата Сообщение от qwertehok Посмотреть сообщение
по коду товара конечно
Я знаю, что по коду.
А как из запроса
SQL
1
SELECT tovar , COUNT(tovar) FROM tovar_sv GROUP BY tovar
вытащить только те коды товара, которые встречаются 1 раз?

Добавлено через 13 минут
Нашёл:
SQL
1
SELECT tovar FROM tovar_sv GROUP BY tovar HAVING COUNT(tovar)=1
Останется только указать нужную категорию. Это уже мелочи.
0
5489 / 4404 / 1076
Регистрация: 29.08.2013
Сообщений: 27,600
Записей в блоге: 3
23.10.2017, 23:06 20
Цитата Сообщение от pivogol Посмотреть сообщение
вытащить только те коды товара, которые встречаются 1 раз?
ну это первый класс же

SQL
1
2
3
4
SELECT * FROM (
SELECT a, b FROM t
) a
WHERE a.a>1
1
23.10.2017, 23:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.10.2017, 23:06
Помогаю со студенческими работами здесь

Определить есть ли в массиве столбец, который складывается только из элементов, кратных заданному числу
Определить, есть ли в заданной с клавиатуры матрице столбец, который складывается только из...

Нужен шаблон меню, который бы смог отображать категории и подкатегории каталога товаров из интернет магазина
Itachi261092, Помогите исходник для меню, нужен шаблон меню, который бы смог отображать категории и...

Как лучше оптимизировать категорию в которой есть подкатегории?
Всем привет, есть категория родитель вот. Вопрос в ней куча смежных категорий, как к ней собрать СЯ...

Как вывести на странице только подкатегории определённой категории (WP+woocommerce)
Здравствуйте дорогие форумчане! Я тока начал изучать woocommerce и не могу найти решение проблемы:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru