2010-08-25 2 views
0

Какое заявление можно использовать для INSERT INTO tableA новой строки ТОЛЬКО ЕСЛИ конкретный столбец в таблицеB равен некоторому значению, где tableB содержит «itemid», а tableA включает «itemid». Я думал о INNER JOIN, но возможно ли это как-то?INSERT INTO и DELETE ... IF/WHERE столбец в другой таблице

Мне также нужен тот же подход для DELETE.

+0

Чтобы уточнить вопрос, предположим, что у меня есть «проект» и в рамках этого проекта «предметы». Я хочу, чтобы таблица INSERT INTO для этого конкретного проекта была ТОЛЬКО, если «активный» столбец этого проекта установлен на «1», например. Таким образом, я не могу вставлять/удалять записи для этого проекта, если он НЕАКТИВНО. – johnshaddad

+0

Честно говоря, ваши комментарии делают ваш вопрос более запутанным, а не объяснением ваших требований. Можете ли вы разместить некоторые данные образца? – Kashif

ответ

7

Это похоже на то, что вы хотите, это:

insert into items(projectid,description) 
select P.ProjectId, '@descriptionval' 
from Projects P 
where P.Active = 1 and P.ProjectID = '@projectidval' 

Если я правильно понимаю вашу схему правильно, вы не можете сделать INNER JOIN, потому что TABLEA не имеет соответствующей строки еще.

Теперь для удаления, у вас есть как строку сейчас, так что вы будете делать присоединиться:

DELETE FROM Items I 
inner join Projects P on I.ProjectId = P.ProjectId 
where P.Active = 1 and I.ProjectID = @ProjId 

ОБНОВЛЕНО на основе комментарий OP на вопрос и его собственный ответ. Это должно допускать от 1 до многих соглашений о переходе между проектами &.

+0

Возможно, вы захотите добавить чек к вставке, чтобы убедиться, что запись еще не существует в таблице, в которую вы вставляете. – HLGEM

+0

Я бы включил «left join tableA a на b.itemid = a.itemid ... где a.itemid имеет значение null» на вставке, чтобы убедиться, что ItemId еще не существует в таблицеB. –

+0

@HLGEM & @Joe: Согласно комментарию OP, это много, чтобы 1, так что это действительно так, как есть. –

0
if exists(select * from TableA,TableB where TableA.itemID = TableB.itemID and TableB.Col = somevalue) 
begin 
    insert into .... 
end 

Сделайте то же самое для удаления, но изменить оператора вставки в ВЕЬЕТЕ

2

INSERT INTO таблицы (col1, col2, col3, COL4)

ВЫБРАТЬ table2.col1, ЭСТ ОТ
table1 стол INNER JOIN table2 таблица2 ON table.col1 = table2.col WHERE table2.value => 'что-то'

+0

+1 для первого – DForck42

1
INSERT INTO tableA (col1, col2) 
SELECT col1, col2 
FROM tableA a INNER JOIN tableB b ON a.itemid= b.itemid 
AND b.somevaluecol = 'somevalue' 

DELETE FROM tableA a 
INNER JOIN tableB b ON a.ItemId = b.ItemId 
WHERE b.somevaluecol = 'somevalue' 
-1

Вот как я ее решил:

IF (SELECT активным FROM проектов WHERE ProjectID = '@ projectidval') <> 1 INSERT INTO элементов (ProjectID, описание) VALUES ('@projectidval', '@descriptionval')

Смежные вопросы