SQL триггер две таблицы не пустые

0
CREATE TRIGGER bookAvailDelete after delete on Auction
for each row
Begin
if (Select count(OLD.isbn) from Auction a > 0)
update Book b
set available =false
where OLD.isbn = isbn
;

У меня есть две таблицы, аукцион и книга. Аукцион имеет ключ isbn, который ссылается на первичный ключ Book isbn. Многие аукционы могут указывать на одну и ту же книгу, поэтому я хочу, чтобы этот триггер проверял каждый аукцион на удаление, чтобы посмотреть, был ли последний аукцион этой книги isbn. Если это так, то устанавливает "доступный" ключ в книге на false.

  • 0
    так что за ошибку вы получаете?
  • 0
    что-то с моим синтаксисом не так, я думаю. Особенно с аукциона
Показать ещё 2 комментария
Теги:
jsp
triggers

3 ответа

0

Как правило, если только не были соображения производительности, вы просто вычислили это на лету (вместо хранения) с запросами типа:

SELECT b.*
   , EXISTS(SELECT * FROM Auction a WHERE a.isbn = b.isbn) AS available
FROM Book b

или (мой предпочтительный формат):

SELECT b.*, (a.isbn IS NOT NULL) AS available
FROM Book b
LEFT JOIN (SELECT DISTINCT isbn FROM Auction) AS a ON b.isbn = a.isbn
;
0

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

delimiter //
CREATE TRIGGER bookAvailDelete after delete on Auction
for each row
Begin
DECLARE updatecount INT;
set updatecount = ( Select count(*) from Auction a where a.isbn = OLD.isbn);
if updatecount > 0 then
update Book b
set b.available =false
where b.isbn = OLD.isbn;
end if;
End;//
  • 0
    Не забудьте снять >0 с set updatecount строки set updatecount .
  • 0
    спасибо, Ууэрдо. я обновил свой ответ.
0

Предполагая, что доступно int:

drop trigger bookAvailDelete;

DELIMITER //
CREATE TRIGGER bookAvailDelete after delete on Auction
    for each row begin
        if NOT EXISTS(Select * from Auction where isbn = old.isbn)
        then
            update Book b set b.available = 0 where b.isbn = old.isbn;
        end if; 
    end;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню