У меня есть такой сценарий:
Есть две таблицы table1
и table2
.table1
имеет первичный ключ pkey
, а table2
имеет внешний ключ fkey
теперь во время вставки, если предоставляется внешний ключ, значение должно быть вставлено как есть.В противном случае он должен получить первичный ключ из table1
, используя некоторые вычисления, и определить внешний ключ для вставки.Как мне это сделать ??
Я использую MySql 5.0
РЕДАКТИРОВАТЬ
В моем сценарии table1
содержит платежные данные, которыеесть, table1
имеет счета и общую сумму, подлежащую оплате.Клиент платит некоторую сумму от общего непогашенного остатка или оплачивает определенный счет.Что я хочу сделать здесь.Когда мне не предоставляется bill_id
(который является первичным ключом в table1
и внешним ключом в table2
), я хотел бы найти самый старый счет, который должен быть в table1
, и вычесть сумму, подлежащую оплате, и далеевычтите оставшуюся сумму, если таковая имеется, из следующего счета в выставленном заказе.Я хочу сделать это на уровне базы данных, а не на верхнем уровне.Поэтому, когда вставка выполняется без значения для внешнего ключа, значение должно быть извлечено и помещено триггером или иным образом непосредственно вставлено.Как мне этого добиться?
Используя ответы, приведенные здесь, я попробовал это:
CREATE DEFINER=`root`@`localhost` TRIGGER `inflow_pay_done_insert` BEFORE INSERT ON `inflow_pay_done` FOR EACH ROW BEGIN
DECLARE pkey INT;
SET pkey = (SELECT bill_id from inflow_bills where payment_stat = 0 and rs_id = NEW.rs_id order by time_stamp limit 1);
SET NEW.bill_id = IF(NEW.bill_id , NEW.bill_id , pkey);
UPDATE raw_mat_sup rms SET rms.outstanding_bal_payable = rms.outstanding_bal_payable - NEW.amount where rms.rs_id = NEW.rs_id;
END|
и получаю следующую ошибку при попытке вставить в inflow_pay_done:
/ * Ошибка SQL (1048): столбец bill_id не может быть пустым * /