Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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 比较“in”子句和结果集中的项_Sql_Oracle - Fatal编程技术网

Sql 比较“in”子句和结果集中的项

Sql 比较“in”子句和结果集中的项,sql,oracle,Sql,Oracle,我想实现如下目标,我有如下简单的查询: SELECT ENT_ID,TP_ID FROM TC_LOGS WHERE ENT_ID IN (1,2,3,4,5). 现在,表TC_LOGS可能没有in子句中的所有项。因此,假设表TC_LOGS只有1,2。我想将in子句中的项目,即1,2,3,4,5与结果集1,2进行比较,得到一个结果,即发现-1,2未发现-3,4,5。我已经通过在应用程序代码中的结果集上应用XSL转换实现了这一点,但我希望通过查询实现这一点,我觉得这是解决这个问题的一个更优雅的解

我想实现如下目标,我有如下简单的查询:

SELECT ENT_ID,TP_ID FROM TC_LOGS WHERE ENT_ID IN (1,2,3,4,5).
现在,表TC_LOGS可能没有in子句中的所有项。因此,假设表TC_LOGS只有1,2。我想将in子句中的项目,即1,2,3,4,5与结果集1,2进行比较,得到一个结果,即发现-1,2未发现-3,4,5。我已经通过在应用程序代码中的结果集上应用XSL转换实现了这一点,但我希望通过查询实现这一点,我觉得这是解决这个问题的一个更优雅的解决方案。另外,我用NVL尝试了以下查询,只是为了将已找到和未找到的项分开

SELECT NVL(ENT_ID,"NOT FOUND") FROM TC_LOGS WHERE ENT_ID IN(1,2,3,4,5)
我期望结果为1,2,未找到,未找到,未找到


但是上面的查询没有返回任何结果。。如果有人能在这里为我指引正确的道路,我将不胜感激。。非常感谢。

假设您的in列表中的项目可以或可以来自另一个查询,您可以执行以下操作

WITH src AS (
  SELECT level id
    FROM dual
 CONNECT BY level <= 5)
SELECT nvl(ent_id, 'Not Found' )
  FROM src
       LEFT OUTER JOIN tc_logs ON (src.id = tc_logs.ent_id)

在我的例子中,src查询只是生成数字1到5。您可以同样轻松地从不同的表中获取数据,将数字加载到使用表运算符查询的集合中,将数字加载到查询的临时表中,取决于IN-list数据的确定方式。

NVL不起作用,因为当与IN语句不匹配时,不会返回包括null在内的值

您可以这样做:

SELECT NVL(ENT_ID, "NOT FOUND") 
FROM TC_LOGS
RIGHT OUTER JOIN (
   SELECT 1 AS 'TempID' UNION 
   SELECT 2 UNION 
   SELECT 3 UNION
   SELECT 4 UNION 
   SELECT 5) AS Sub ON ENT_ID = TempID

外部联接将在没有匹配项的情况下为ENT_ID返回空值。注意,我不是Oracle人员,所以我不能保证此语法是完美的。

如果您有一个表,让我们使用表src包含所有1,2,3,4,5值,您可以使用完全联接。
您可以使用src作为从dual CONNECT BY level中选择级别id,非常感谢所有的响应。我相信Justin的回复应该是有效的,只要我知道如何在in子句中输入条目。与此同时,我想出了一个解决办法。我正在从dual查询IN子句项,并用我的帖子中的查询进行减号。。
         SELECT 
           ent_id,tl.tp_id,src.tp_id 
         FROM 
           src
        FULL JOIN
          tc_logs tl
        USING (ent_id)
        ORDER BY
          ent_id