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

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

23.10.2017, 09:28. Показов 987. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.10.2017, 09:28
Ответы с готовыми решениями:

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

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

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

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

20
5582 / 4432 / 1080
Регистрация: 29.08.2013
Сообщений: 27,717
Записей в блоге: 3
23.10.2017, 10:39 2
вывести товар и количество категорий
там где категория 1 - удалить
0
21 / 21 / 8
Регистрация: 07.01.2009
Сообщений: 556
23.10.2017, 11:52  [ТС] 3
Видимо, для этого можно применить "IF" в запросе.
Сейчас почитаю учебники и поучусь использовать этот оператор в запросах.
0
5582 / 4432 / 1080
Регистрация: 29.08.2013
Сообщений: 27,717
Записей в блоге: 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
5582 / 4432 / 1080
Регистрация: 29.08.2013
Сообщений: 27,717
Записей в блоге: 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
5582 / 4432 / 1080
Регистрация: 29.08.2013
Сообщений: 27,717
Записей в блоге: 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
5582 / 4432 / 1080
Регистрация: 29.08.2013
Сообщений: 27,717
Записей в блоге: 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
5582 / 4432 / 1080
Регистрация: 29.08.2013
Сообщений: 27,717
Записей в блоге: 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
5582 / 4432 / 1080
Регистрация: 29.08.2013
Сообщений: 27,717
Записей в блоге: 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
5582 / 4432 / 1080
Регистрация: 29.08.2013
Сообщений: 27,717
Записей в блоге: 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
5582 / 4432 / 1080
Регистрация: 29.08.2013
Сообщений: 27,717
Записей в блоге: 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
5582 / 4432 / 1080
Регистрация: 29.08.2013
Сообщений: 27,717
Записей в блоге: 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
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.10.2017, 23:06
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru