Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Удаление строк в таблице при перекрестном запросе  [new]
Divest
Member

Откуда:
Сообщений: 24
Доброй ночи! Прошу помощи. Имеем две таблицы (их на много больше). В одной таблице наименование товара, во второй их количество. Необходимо удалить из Trade.product строки которые trade.productInventory.Quantity < 1 и Trade.Product.ObjectGuid = 1.
Структура таблиц следующая:
Trade.Product:
ProductGuid
ObjectGuid
ProductGroupGuid
ProductCode
BarCode
Name
Price
Quantity
UnitMessure
MinQuantity
OptimalOrderQuantity
CashGuid
CashDepartament
rowguid ModifiedDate
BuyDiscount Active
WeigthProductCode

и

trade.productInventory:
ProductGuid
ObjectGuid
Quantity
rowguid
ModifiedDate

Первичный ключ: Trade.Product.ProductGuid
27 янв 16, 00:51    [18733641]     Ответить | Цитировать Сообщить модератору
 Re: Удаление строк в таблице при перекрестном запросе  [new]
Glory
Member

Откуда:
Сообщений: 104751
Divest
Необходимо удалить из Trade.product строки которые trade.productInventory.Quantity < 1 и Trade.Product.ObjectGuid = 1.

Удаление записей осуществляется командой DELETE
27 янв 16, 10:25    [18734378]     Ответить | Цитировать Сообщить модератору
 Re: Удаление строк в таблице при перекрестном запросе  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31956
Divest
Прошу помощи. Имеем две таблицы (их на много больше). В одной таблице наименование товара, во второй их количество. Необходимо удалить из Trade.product строки которые trade.productInventory.Quantity < 1 и Trade.Product.ObjectGuid = 1.
А какие варианты вы уже пробовали?
27 янв 16, 10:27    [18734387]     Ответить | Цитировать Сообщить модератору
 Re: Удаление строк в таблице при перекрестном запросе  [new]
iiyama
Member

Откуда:
Сообщений: 642
Divest,
Удаление - DELETE

ИМХО, Удалять продукты из базы = дурная архитектура. Добавьте поле в таблице Trade.Product типа ProductActive и выставляйте нужный флаг в разных условиях. Тогда это будет команда UPDATE
27 янв 16, 10:58    [18734532]     Ответить | Цитировать Сообщить модератору
 Re: Удаление строк в таблице при перекрестном запросе  [new]
Divest
Member

Откуда:
Сообщений: 24
Glory, спасибо, Ваша очевидность.
27 янв 16, 20:39    [18737664]     Ответить | Цитировать Сообщить модератору
 Re: Удаление строк в таблице при перекрестном запросе  [new]
Divest
Member

Откуда:
Сообщений: 24
alexeyvg
Divest
Прошу помощи. Имеем две таблицы (их на много больше). В одной таблице наименование товара, во второй их количество. Необходимо удалить из Trade.product строки которые trade.productInventory.Quantity < 1 и Trade.Product.ObjectGuid = 1.
А какие варианты вы уже пробовали?


Предполагаю, что это очень глупые запросы. Попыток много разных предпринял.

Delete From Trade.Product
where productGuid IN
(SELECT ProductGuid
FROM trade.productInventory
WHERE Quantity < 1 )
27 янв 16, 20:50    [18737695]     Ответить | Цитировать Сообщить модератору
 Re: Удаление строк в таблице при перекрестном запросе  [new]
Divest
Member

Откуда:
Сообщений: 24
iiyama
Divest,
Удаление - DELETE

ИМХО, Удалять продукты из базы = дурная архитектура. Добавьте поле в таблице Trade.Product типа ProductActive и выставляйте нужный флаг в разных условиях. Тогда это будет команда UPDATE


Данное поле в таблице Trade.Product имеется (oно после BuyDiscount, не перенёс на другую строку). Дело в том, что логика программы не позволяет его продавать, но показывает в списке товара. Ввиду не правильного заполнения справочников, получилось так, что около 1000 (из 1500) лишних позиций в справочнике. Вот их и удалить нужно.
27 янв 16, 20:54    [18737702]     Ответить | Цитировать Сообщить модератору
 Re: Удаление строк в таблице при перекрестном запросе  [new]
Glory
Member

Откуда:
Сообщений: 104751
Divest
Glory, спасибо, Ваша очевидность.

Вы хелп по команде DELETE хоть раз то открывали ?
Может даже до примеров использования там дошли ?
27 янв 16, 21:10    [18737740]     Ответить | Цитировать Сообщить модератору
 Re: Удаление строк в таблице при перекрестном запросе  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
Divest
Попыток много разных предпринял.

Delete From Trade.Product
where productGuid IN
(SELECT ProductGuid
FROM trade.productInventory
WHERE Quantity < 1 )
А ошибка, наверное, звучит так: "The delete statement conflicted with the foreign key constraint..."
27 янв 16, 22:25    [18738011]     Ответить | Цитировать Сообщить модератору
 Re: Удаление строк в таблице при перекрестном запросе  [new]
Divest
Member

Откуда:
Сообщений: 24
invm, нет, с этим проблем нет (Каскадное удаление). Спасибо всем за помощь. Вариант выше работающий. Вчера просто засиделся, решение было более чем рядом.
Glory, да, я открывал HELP по SQL, и даже дошел до примеров. Проблема тут чуть-чуть в другом, к БД я имею очень далекое отношение, и хотелось понять логику выполнения таких запросов. Не более. При обращении к пользователям данного форума, я четко указал свою проблему. По ее описанию, вполне можно понять, что у меня есть понимание, хоть и поверхностное моей проблемы. Я не обратился с просьбой сделать все за меня, а дать совет при удалении данных при перекрестном запросе. Вопрос alexeyvg просто заставил чуть-чуть по другому посмотреть на ситуацию.
27 янв 16, 23:00    [18738126]     Ответить | Цитировать Сообщить модератору
 Re: Удаление строк в таблице при перекрестном запросе  [new]
Glory
Member

Откуда:
Сообщений: 104751
Divest
Я не обратился с просьбой сделать все за меня, а дать совет при удалении данных при перекрестном запросе.

ну так я и дал вам совет - использовать команду DELETE
Но вас он почему то не устроил
27 янв 16, 23:13    [18738154]     Ответить | Цитировать Сообщить модератору
 Re: Удаление строк в таблице при перекрестном запросе  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31956
Divest
Попыток много разных предпринял.

Delete From Trade.Product
where productGuid IN
(SELECT ProductGuid
FROM trade.productInventory
WHERE Quantity < 1 )
Вам нужно освоить нормальный синтаксис команды DELETE
Пример "Ограничение удаляемых строк", "В. Использование операторов объединения и вложенных запросов к данным в одной таблице для удаления строк в другой таблице" как раз похож на ваш случай:
-- Mention target table, SalesPersonQuotaHistory, only once. Simpler. 
DELETE spqh 
FROM Sales.SalesPersonQuotaHistory AS spqh 
    INNER JOIN Sales.SalesPerson AS sp
        ON spqh.BusinessEntityID = sp.BusinessEntityID 
WHERE sp.SalesYTD > 2500000.00;

Остаётся поменять название таблиц и полей. А, и ещё не "> 2500000.00", а "< 1" :-)
27 янв 16, 23:45    [18738243]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить