Как удалить с этими условиями?

Как я могу удалить строки, которые соответствуют нескольким условиям из таблицы без первичного ключа? (фактически первичный ключ формируется каждым столбцом)

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

Но это дает мне ошибку о том, что невозможно связать идентификатор нескольких частей #temp.idCarga

Может быть, это легко, но я так долго пытался, и я не могу сосредоточиться должным образом.

CREATE TABLE #TEMP 
(
    CC int,
    idCarga int, 
    Tipo nvarchar(50),
    Importe float,
    Bloque nvarchar(50),
    idsistema int
)

INSERT INTO #TEMP(CC,idCarga,Importe,Bloque,Tipo,IdSistema)
select distinct CI.CC,CI.idCarga,CI.Importe,CI.Bloque,CI.Tipo,CI.idSistema
from CONT_INGRESOS_InformeMayor CI
INNER JOIN 
(
    SELECT idCarga,CC,Bloque,Importe,TIpo
    FROM CONT_INGRESOS_InformeMayor
) CI2 
    ON CI.CC = CI2.CC 
    AND CI.Bloque = CI2.Bloque 
    AND CI.TIpo <> CI2.Tipo
WHERE CI.idCarga = @idCarga 
    AND CI2.idCarga = @idCarga 
    AND CI.Importe = 0

DELETE 
FROM CONT_INGRESOS_InformeMayor 
WHERE idCarga = #temp.idCarga 
    AND tipo = #temp.tipo 
    AND importe = #temp.importe 
    and bloque = #temp.bloque

person Javiere    schedule 31.05.2012    source источник


Ответы (3)


Вы пропустили присоединение к DELETE. Попробуй это:

DELETE _d
FROM CONT_INGRESOS_InformeMayor AS _d
INNER JOIN #temp AS _t
    ON _d.idCarga = _t.idCarga 
    AND _d.tipo = _t.tipo 
    AND _d.importe = _t.importe 
    AND _d.bloque = _t.bloque
person The Davester    schedule 31.05.2012

В вашем DELETE отсутствует JOIN таблица #temp

DELETE t1
FROM CONT_INGRESOS_InformeMayor t1
INNER JOIN #temp t
    ON t1.idCarga = t.idCarga 
        AND t1.tipo = t.tipo 
        AND t1.importe = t.importe 
        and t1.bloque = t.bloque
person Taryn    schedule 31.05.2012

С другой стороны, вы можете попробовать удалить строки без использования временной таблицы:

DELETE FROM CI
from CONT_INGRESOS_InformeMayor CI
INNER JOIN 
(
    SELECT idCarga,CC,Bloque,Importe,TIpo
    FROM CONT_INGRESOS_InformeMayor
) CI2 
    ON CI.CC = CI2.CC 
    AND CI.Bloque = CI2.Bloque 
    AND CI.TIpo <> CI2.Tipo
WHERE CI.idCarga = @idCarga 
    AND CI2.idCarga = @idCarga 
    AND CI.Importe = 0
person Andriy M    schedule 01.06.2012