如何在sql中检查表中是否存在所有元素?
我有PHP中的任何主题id数组,比如如何在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
['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'
);