Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> уточнение по синтаксису.... 
:(
    Опции темы
setnull
Дата 11.12.2007, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 3.7.2007

Репутация: нет
Всего: 1



На сколько я понял, в 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
)
????????
PM MAIL   Вверх
setnull
Дата 11.12.2007, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 417
Регистрация: 3.7.2007

Репутация: нет
Всего: 1



ОГО!!!

Я вот че нашел

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

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

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

PM MAIL   Вверх
TaNK
Дата 12.12.2007, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



Код

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 внешнеее соединение


--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
under_sun
Дата 12.12.2007, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 3.10.2007
Где: Ебург

Репутация: 5
Всего: 17



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

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


Это сообщение отредактировал(а) under_sun - 12.12.2007, 13:13
--------------------
TMTOWTDI
PM MAIL ICQ   Вверх
LuMee
Дата 12.12.2007, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 30.3.2007

Репутация: нет
Всего: 1



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

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

Кстати, аналогичная конструкция есть и для UPDATE - удобна при обновлении значений полей таблицы с использованием данных из других таблиц.
PM MAIL   Вверх
under_sun
Дата 12.12.2007, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 3.10.2007
Где: Ебург

Репутация: 5
Всего: 17



Проверь, должно работать:
Код

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

--------------------
TMTOWTDI
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0654 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.