mysql - SQL连接同一个表

标签 mysql sql oracle join query-optimization

enter image description here

  1. 表 ORDER_ITEM 只有 2 种类型的记录。 ORDER_TYPE MAT 和 VAL
  2. 记录为 ORDER_TYPE MAT 没有 ITEM_ID
  3. 使用 ORDER_TYPE VAL 的记录始终具有 ITEM_ID
  4. VAL 和 MAT 之间的链接是 ORDER_ID。这意味着一个 ORDER_ID 可以有多个 VAL 但只有一个 MAT。
  5. 我需要找出 ORDER_TYPE MAT 为 VALID 或 INVALID 的 ITEM_ID。由于表在 JOB_DATE 上可能很大。我们想把它放在缓存中。

我试过这样的事情。没有优化。但这也没有给出预期的结果。记录的ITEM_ID为空。

select * 
from   ORDER_ITEM
where  ORDER_TYPE = 'MAT' 
  and  JOB_DATE = '7/22/2016'
  and  ORDER_ID in (
                     select ORDER_ID
                     from   ORDER_ITEM 
                     where  ITEM_ID in (
                                         select ITEM_ID
                                         from   ORDER_ITEM 
                                         where  JOB_DATE = '7/22/2016'
                                            and ORDER_TYPE = 'VAL'
                                       )
                   )
;

我可以在同一张表上使用 LEFT/RIGHT 外连接获得结果吗?还是我需要应用程序来获得结果。

我需要找到填充了 ITEM_ID 的 MAT 记录。

我要找的结果是enter image description here

最佳答案

试试这个,如果没有帮助请告诉我

select 
    mat.ORDER_ID, mat.ORDER_TYPE,val.ITEM_ID,val.VALID_INVALID 
from ORDER_ITEM mat 
    inner join ORDER_ITEM val 
        on mat.ORDER_ID = val.ORDER_ID
where mat.ORDER_TYPE='MAT' and val.ORDER_TYPE='VAL'

关于mysql - SQL连接同一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38545391/

相关文章:

javascript - Ajax 数据管理

java - Android:如何使用 Android Java 代码连接 oracle 数据库?

oracle - 类型关键字。帮助我在 plsql 中解释这段代码?

PHP MYSQL SELECT 即使有些是空的

PHP 文件 - 使用数据库问题中的值填充动态 <select> 标记

mysql - 如何在使用flask_mysqldb的flask中创建单元测试?

sql - 在 sqlite 管理器中从 sqlite 创建数据库模式

sql - 将文本更改为字符变化未按预期执行

sql - 如何将日期转换为月份数?

mysql - 聚合 SQL 查询