如何检查另一个表中存在的值

问题描述 投票:-1回答:3

我有两个表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中插入的,当完成事务时,它发生在第二个table_2中没有插入行,我如何检查在table_2 IN ORACLE中存在的新插入值。

sql oracle triggers
3个回答
1
投票

使用左连接并选择表1的所有id,其中table2 ids显示为null,实际上这些空ID在表2中不可用

select from t1 left join t2 on t1.id=t2.id
 where t.id is null

0
投票

一种选择是创建一个函数(如果TRUE中存在ID,则返回Boolean - TABLE_2;否则返回FALSE)。

我认为TABLE_1_IDTABLE_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;

0
投票

您可以使用INTERSECT设置操作检查以下Select语句:

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不存在,否则存在。

© www.soinside.com 2019 - 2024. All rights reserved.