SQL-内部-内部联接

时间:2020-08-11 19:43:34

标签: sql db2 inner-join

需要帮助...我确实尝试过,几乎完成了60%(我想)...

fyi:我们正在使用DB2,如果我的问题不清楚,请告诉我。

我们最初的要求是在以下情况下找到PRODUCT_ID和Part_Serial_No:

首要条件:

他们在实际产品上安装了actual_part

表结构为:

PRODUCT_ID          PART_NAME       PART_SERIAL_NUMBER
----------          ---------       --------------
1                   ACTUAL_PART     ACTUAL_SERIAL_1
2                   ACTUAL_PART     ACTUAL_SERIAL_2

所以我的SQL很简单:

SELECT PRODUCT_ID, PART_SERIAL_NUMBER FROM TABLE1 WHERE PART_NAME='ACTUAL_PART'

第二个要求:

他们更改了要求。他们说,他们在实际产品中安装了sub_part,而实际零件将安装在sub_part上。

表结构更改为:

PRODUCT_ID          PART_NAME       PART_SERIAL_NUMBER
----------          ---------       --------------
1                   SUB_PART        SUB_PART_SERIAL_1
SUB_PART_SERIAL_1   ACTUAL_PART     ACTUAL_SERIAL_1
2                   SUB_PART        SUB_PART_SERIAL_2
SUB_PART_SERIAL_2   ACTUAL_PART     ACTUAL_SERIAL_2

所以我更改了SQL,它起作用了:

SELECT part1.PRODUCT_ID, part2.Part_Serial_No 
from TABLE1 part1 
INNER JOIN TABLE1 part2 on part1.PART_SERIAL_NUMBER = part2.PRODUCT_ID 
where part1.PART_NAME in ('SUB_PART') 
and part2.PART_NAME in ('ACTUAL_PART')

第三项要求:

同样,他们更改了要求。他们说,他们在实际产品中安装了一个sub_part,并且将在sub_part上安装另一个sub_sub_part。实际零件将安装在sub_sub_part上。

表结构更改为:

PRODUCT_ID              Part_Name       PART_SERIAL_NUMBER
----------              ---------       --------------
1                       SUB_PART        SUB_PART_SERIAL_1
SUB_PART_SERIAL_1       SUB_SUB_PART    SUB_SUB_PART_SERIAL_1
SUB_SUB_PART_SERIAL_1   ACTUAL_PART     ACTUAL_SERIAL_1
2                       SUB_PART        SUB_PART_SERIAL_2
SUB_PART_SERIAL_2       SUB_SUB_PART    SUB_SUB_PART_SERIAL_2
SUB_SUB_PART_SERIAL_2   ACTUAL_PART     ACTUAL_SERIAL_2

在这里我需要帮助来获取PRODUCT_ID和PART_SERIAL_NUMBER

1 个答案:

答案 0 :(得分:1)

您可以将表加入三次,如下所示:

select
  a.product_id,
  b.product_id as part_id,
  c.product_id as subpart_id,
  c.part_serial_number
from table1 a
join table1 b on b.product_id = a.part_serial_number
join table1 c on c.product_id = b.part_serial_number
where a.part_name = 'SUB_PART'
  and b.part_name = 'SUB_SUB_PART'
  and c.part_name = 'ACTUAL_PART'