Как использовать вставку в из в SQL, когда мне нужно вставить из 2 таблиц, соединенных вместе и другой таблицы - PullRequest
0 голосов
/ 06 октября 2018
INSERT INTO reserve ( 
    branch_code, 
    bc_id, 
    reserve_date_time_placed, 
    bor_no )
SELECT b.branch_code, 
       c.bc_id, 
       TO_DATE('2018-09-20, 4:00 P.M.', 'YYYY-MM-DD, HH:MI P.M.'), 
       w.bor_no FROM borrower w
FROM borrower w, book_copy c
     JOIN branch b on c.branch_code = b.branch_code
WHERE b.branch_contact_no = '8888888883'
AND c.book_call_no = '005.74 C822D 2018'
AND w.fname = 'Ada';

Я попытался вставить в резервную таблицу таблицу bor_no из таблицы заемщика по отдельности, а другую информацию из таблицы book_copy, соединенную с таблицей ветвления.

Поэтому я думаю, чтобы лучше объяснить свой вопрос, я пытаюсьвставить в резервную таблицу из (book_copy, соединенный с филиалом) и (заемщик).Но заемщик и book_copy не имеют никакого отношения.

borrower table is created like below.

    CREATE TABLE borrower (
    bor_no         NUMBER(6) NOT NULL,
    bor_fname      VARCHAR2(59) NOT NULL,
    bor_lname      VARCHAR2(50) NOT NULL,
    bor_street     VARCHAR2(80) NOT NULL,
    bor_suburb     VARCHAR2(50) NOT NULL,
    bor_postcode   CHAR(4) NOT NULL,
    branch_code    NUMBER(2) NOT NULL
);

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Одна ошибка - это несколько ваших FROM предложений.Попробуйте написать запрос следующим образом:

INSERT INTO reserve (branch_code, bc_id, reserve_date_time_placed, bor_no )
    SELECT b.branch_code, bc.bc_id, 
           TO_DATE('2018-09-20, 4:00 P.M.', 'YYYY-MM-DD, HH:MI P.M.'), 
           w.bor_no 
    FROM book_copy bc JOIN
         branch b 
         ON bc.branch_code = b.branch_code JOIN
         borrower w
         ON w.fname = 'Ada'
    WHERE b.branch_contact_no = '8888888883' AND
          bc.book_call_no = '005.74 C822D 2018';

Обратите внимание, что здесь используется правильный синтаксис JOIN для всех JOIN с.В предложении FROM запятая отсутствует.

0 голосов
/ 06 октября 2018

Позаботьтесь о том, чтобы в вашем примере было дважды "from borower".

После этого вы можете просто использовать insert in ... select ...

INSERT INTO reserve ( 
branch_code, 
bc_id, 
reserve_date_time_placed, 
bor_no ) 
SELECT b.branch_code, 
       c.bc_id, 
       TO_DATE('2018-09-20, 4:00 P.M.', 'YYYY-MM-DD, HH:MI P.M.'), 
       w.bor_no 
FROM  book_copy c
     JOIN branch b on c.branch_code = b.branch_code
     JOIN bororwer w on c ..... = w. .... 
WHERE b.branch_contact_no = '8888888883'
AND c.book_call_no = '005.74 C822D 2018'
AND w.fname = 'Ada';

В чем ваша ошибка?

РЕДАКТИРОВАТЬ: Вы можете сделать вставку только из book_Copy и ветви, как это:

INSERT INTO reserve ( 
branch_code, 
bc_id, 
reserve_date_time_placed, 
bor_no ) 
SELECT b.branch_code, 
       c.bc_id, 
       TO_DATE('2018-09-20, 4:00 P.M.', 'YYYY-MM-DD, HH:MI P.M.'), 
       w.bor_no 
FROM  book_copy c
     JOIN branch b on c.branch_code = b.branch_code
      WHERE b.branch_contact_no = '8888888883'
AND c.book_call_no = '005.74 C822D 2018'

После этого получить заемщика_ид в переменную

select @borower_id from borrower where fname = 'Ada' 

, а затем обновить резерв:

update reserve set borrower_id = @borrower_id 
where book_call_no = .... and branch_contact = .. ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...