sql - Oracle SQL。如何选择列值指定条件的特定 ID?

标签 sql oracle oracle11g oracle-sqldeveloper

我有以下语句/查询:

SELECT table1.file_id,
   table1.status,
   table2.status
FROM table1
INNER JOIN table2 ON table1.file_id = table2.file_id;

结果如下:

   FILE ID   |   Status Table 1    |   Status Table 2
-----------------------------------------------------
   5500002   |        AX           |        ICS
   5500002   |        AX           |        ICSO
   5500002   |        AXO          |        ICS
   5500003   |        AX           |        ICS
   5500003   |        AX           |        ICS
   5500003   |        AX           |        ICS
   5500004   |        NULL         |        ICSO test
   5500004   |        AXO          |        ICS
   5500004   |        AX           |        NULL

我需要每个文件 ID 检查四种状态:

 - AX
 - AXO
 - ICS
 - ICSO

我现在只想对涵盖所有四种状态的文件 ID 运行选择。如您所见,文件 ID 出现多次,我希望查询仅返回满足要求的文件 ID,在本例中将返回 5500002和 5500004。

对于 5500004,有一个状态提到 ICSO 测试,但无论文本的其余部分如何,如果单元格中包含 ICSO,它都会被视为 ICSO。这同样适用于其他状态。

我该如何添加到查询中以仅选择特定 ID?

最佳答案

尝试如下所示

SELECT file_id
FROM
(
SELECT table1.file_id,
   table1.status as status1,
   table2.status as status2
FROM table1
INNER JOIN table2 ON table1.file_id = table2.file_id
) tab
GROUP BY file_id
HAVING COUNT(DISTINCT tab.status1) + COUNT(DISTINCT tab.status2) >= 4

关于sql - Oracle SQL。如何选择列值指定条件的特定 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30538378/

相关文章:

Oracle 不使用索引

Oracle 11g Express Edition SYSTEM 架构被锁定

c# - 类似数组的结构

java - 用java加密数据库用户名和密码?

sql - 小数点分隔符 oracle

oracle - 如何查看 Oracle 的 DBMS_PARALLEL_EXECUTE 实用程序完成的错误日志记录?

php - 在php中显示最近上传的图像仅显示与提交到该die的其他数据相对应的单个图像

mysql - 非聚合分组列是否需要 HAVING?

php - 按多列限制查询

sql - SQL 请求中的标识符无效