Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > уточнение по синтаксису....


Автор: setnull 11.12.2007, 20:27
На сколько я понял, в T-SQL в DELETE нельзя давать таблице псевдонимы как то

delete from my_table mt where mt.my_field>@my_value


во всяком случае, на такую конструкцию он ругается

Incorrect syntax near 'mt'.,

а без mt - работает.....


Так а как произвести такую чистку как:


ParamName    ParamValue
    p1                   7
    p1                 10
    p1                   5
   
    p2                  3
    p2                  3
    p2                  12


delete from may_table mt1
where 
mt1.ParamValue <> 

(
select max(mt2.ParamValue) 
from 
my_table mt2 
where mt2.ParamName = mt1.ParamName
)
????????

Автор: setnull 11.12.2007, 22:40
ОГО!!!

Я вот че нашел

delete 
from my_tabel
from my_tabel as mt
left join (тут можно еще привязать еще че-нибудь....)
where (всякие условия....)

только я до конца не понял суть...  если my_table во втором from'е будет использована больше одного раза, и нее че, будут удалены все записи, формирующие полученную выборку или как?

Может то-нить объяснить, че это за конструкция?.....

Автор: TaNK 12.12.2007, 09:07
Код

select  p.dog_num, part.par_name, part.post_ind,bn.name, vil.village_name, str.street_name, part.nb_house

From  payer p inner join partners part on p.par_id=part.par_id
              inner join village vil on vil.village_id=part.village_id
              inner join street str  on str.street_id=part.street_id
              inner join bnkreg bn on bn.adr=03


where p.dog_num=130


Добавлено через 1 минуту и 36 секунд
inner join - внутреннее соединение
left,right,full - outer join внешнеее соединение

Автор: under_sun 12.12.2007, 12:36
Есть вариант удаления, используя табличное выражение:
Код

WITH T 
AS 
( ...
) DELETE ....

Автор: LuMee 12.12.2007, 12:39
Второй from задает выборку, которая может быть использована при формировании условий для удаления записей из таблицы. Одним словом, запрос:
Код
DELETE FROM FirstTable
FROM SecondTable
WHERE FirstTable.id = SecondTable.id

будет эквивалентен запросу
Код
DELETE FROM FirstTable
WHERE id IN (SELECT id FROM SecondTable)

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

Автор: under_sun 12.12.2007, 13:36
Проверь, должно работать:
Код

WITH Tab 
AS
(
SELECT ParamName as PN, MAX(ParamValue) as PV
FROM my_table
GROUP BY ParamName
)
DELETE FROM my_table
FROM my_table m
       RIGHT JOIN Tab ON Tab.PV != m.ParamValue AND Tab.PN = m.ParamName

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)