как проверить значение существует в другой таблице - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть две таблицы table_1 и table_2

table_1 
  id 
  1
  2
  3
  4
 ...



table_2
     id  table_1_id
     1       1
     5       2
     8       3
     9       4

это первое, что я вставляю table_1 и второе table_2. это вставка в php, и когда завершается транзакция, случается, что во второй таблице _2 не вставляется строка, КАК я могу проверить, существует ли новое вставленное значение в table_2 IN ORACLE .

Ответы [ 3 ]

0 голосов
/ 14 сентября 2018

используйте левое соединение и выберите все идентификаторы таблицы 1, где идентификаторы table2 показывают ноль, фактически эти нулевые идентификаторы не доступны в таблице 2

select from t1 left join t2 on t1.id=t2.id
 where t.id is null
0 голосов
/ 14 сентября 2018

Вы можете проверить с помощью следующего оператора Select с помощью INTERSECT операции set:

select id as return_id
  into v_return_id -- this variable of is of table_1.id%type
  from
  (  
   select id from table_1
   intersect
   select table_1_id from table_2 
  ) 
 where id = &i_id -- might be replaced with :new.id or :old.id inside a trigger

Если для переменной подстановки i_id SQL возвращает значение, то связанный id не существует, в противном случае существует.

0 голосов
/ 14 сентября 2018

Один из вариантов - создать функцию (которая возвращает логическое значение - TRUE, если ID существует в TABLE_2; FALSE в противном случае).

Я предполагаю, что TABLE_1_ID уникально вTABLE_2.Если это не так, есть вероятность, что он вернет ошибку TOO_MANY_ROWS, поэтому я обработал ее.

create or replace function f_id_exists (par_table_1_id in table_1.id%type)
  return boolean
is
  l_table_1_id    table_1.id%type;
begin
  select t.table_1_id
    into l_table_1_id
    from table_2 t
    where t.table_1_id = par_table_1_id;

  return true;
exception
  when no_data_found then
    return false;
  when too_many_rows then
    return true;
end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...