Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在sql中检查表中是否存在所有元素?_Sql_Oracle - Fatal编程技术网

如何在sql中检查表中是否存在所有元素?

如何在sql中检查表中是否存在所有元素?,sql,oracle,Sql,Oracle,我有PHP中的任何主题id数组,比如 ['abc123', 'bcd3432', 'bla232', ....] 以下是我在sql oracle中的错误尝试 select * from subject_table where subject_id IN ('abc123', 'bcd3432', 'bla232'....) 如果主题存在,则返回true,否则返回false 如何实现它?试试: select case when count(1) > 0 then 'tru

我有PHP中的任何主题id数组,比如

['abc123', 'bcd3432', 'bla232', ....]
以下是我在sql oracle中的错误尝试

select
  *
from
  subject_table
where
  subject_id IN ('abc123', 'bcd3432', 'bla232'....)
如果主题存在,则返回true,否则返回false

如何实现它?

试试:

select
  case when count(1) > 0 then 'true' else 'false' end
from
  subject_table
where
  subject_id IN ('abc123', 'bcd3432', 'bla232')

如果设置>0为真,0为假,则可以这样选择:

select count(*)  as Existed
from
  subject_table
where
  subject_id IN ('abc123', 'bcd3432', 'bla232'....)

您需要一个不同的计数来知道是否所有的主题都在那里

select case when count(distinct subject_id) = 3 then 'true' else 'false' end as status 
  from subject_table
 where subject_id in('abc123', 'bcd3432', 'bla232')

将数组作为集合传递:

CREATE OR REPLACE TYPE StringList IS TABLE OF VARCHAR2(20);
/
然后你可以做:

SELECT CASE
       WHEN EXISTS (
              SELECT 1
              FROM   subject_table
              WHERE  StringList( 'abc123', 'bcd3432', 'bla232' )
                     SUBMULTISET OF
                     CAST( COLLECT( subject_id ) AS StringList )
            )
       THEN 'true'
       ELSE 'false'
       END AS has_all_ids
FROM   DUAL;
您甚至可以使用:


您可以试试这个。这里我将包含所有元素的字符串拆分为一组行,并将其与具有左联接的主表进行比较


仅当所有三个主题(而不仅仅是一个或多个主题)都存在时,才希望返回Truetwo@JSapkota,目前,我不知道如何编写sql,它只在有3个主题时返回true。@Pரதீப், 我不确定如何编写sql。可能与的重复或这将导致失败。这仅检查表中是否存在任何元素,而不是表中是否存在所有元素。问题是,如果表中所有值都存在。对于您的解决方案,您必须最终将结果计数*与提交的参数“abc123”、“bcd3432”的数量进行比较。。。仅当subject_id唯一时,此选项才有效。
SELECT CASE
       WHEN EXISTS (
              SELECT 1
              FROM   subject_table
              WHERE  :your_array
                     SUBMULTISET OF
                     CAST( COLLECT( subject_id ) AS StringList )
            )
       THEN 'true'
       ELSE 'false'
       END AS has_all_ids
FROM   DUAL;
WITH     given_sub
     AS (    SELECT DISTINCT TRIM (REGEXP_SUBSTR ('abc123,bcd3432,bla232',
                                                  '[^,]+',
                                                  1,
                                                  LEVEL))
                                subject_id
               FROM DUAL
         CONNECT BY INSTR ('abc123,bcd3432,bla232',
                           ',',
                           1,
                           LEVEL - 1) > 0)
SELECT CASE
          WHEN COUNT (DISTINCT s.subject_id) < COUNT (DISTINCT g.subject_id)
          THEN
             'FALSE'
          ELSE
             'TRUE'
       END
          All_found
  FROM given_sub g
       LEFT OUTER JOIN subject_table s
          ON     s.subject_id = g.subject_id
             AND s.subject_id IN ('abc123',
                                  'bcd3432',
                                  'bla232'
                                  );