创建查询以获取引用所有选定的物质ID的所有组分

时间:2018-10-18 08:36:36

标签: sql oracle

需要您的帮助来创建一些oracle SQL查询,让我们首先来看一下我的表的设计

with open('images.txt', 'w') as text_file:
    left_list = []
    right_list = []

    for folderName, subfolders, f in os.walk(root_folder):
        for subfolder in subfolders:
            if subfolder == 'image_02':
                left_path = os.path.join(folderName, subfolder, 'data')
                left_list = [f for f in sorted(os.listdir(left_path)) if
                         not f.startswith('.') and f.endswith('.png')]
            elif subfolder == 'image_03':
                right_path = os.path.join(folderName, subfolder, 'data')
                right_list = [f for f in sorted(os.listdir(right_path)) if
                          not f.startswith('.') and f.endswith('.png')]
    if len(left_list) != len(right_list):
        print('ERROR: directory {} does not match with {}'.format(left_path, right_path))
        continue

    for left_file, right_file in zip(left_list, right_list):
        text_file.write(
        os.path.join(left_path, left_file) + " " + os.path.join(right_path, right_file) + "\n")

该组件包含许多物质,所以我创建了第三个表 Comp_Subs具有两个列Component table has two cols id(pk) and name Substance table has two cols id(pk) and name comp_id(fk to Component),并且列在一起是唯一的。

给出一些物质的ID,创建一个查询以获取具有所有给定物质的所有组分

Table Schema

示例:给定这些物质1、2、3的ID,创建一个查询,该查询将检索具有所有选定物质的所有化合物。

输入:1,2,3

输出将一列包含这样的结果

Output

给定示例的结果应返回comp1和comp2 因为comp1包含物质1、2和3 而且comp2还包含1、2和3

2 个答案:

答案 0 :(得分:1)

使用 File f=new File("path to file"); Uri u=Uri.fromFile(f); filePathCallback.onReceiveValue(new Uri[]{u}); GROUP BY

SQL Fiddle

Oracle 11g R2架构设置

HAVING

查询1

CREATE TABLE Comp_Sub ( comp_id, sub_id ) AS
  SELECT 1, 1 FROM DUAL UNION ALL
  SELECT 1, 2 FROM DUAL UNION ALL
  SELECT 1, 3 FROM DUAL UNION ALL
  SELECT 2, 1 FROM DUAL UNION ALL
  SELECT 2, 2 FROM DUAL UNION ALL
  SELECT 2, 3 FROM DUAL UNION ALL
  SELECT 2, 4 FROM DUAL UNION ALL
  SELECT 3, 1 FROM DUAL UNION ALL
  SELECT 3, 5 FROM DUAL UNION ALL
  SELECT 3, 7 FROM DUAL;

Results

SELECT comp_id
FROM   comp_sub
WHERE  sub_id IN ( 1, 2, 3 )
GROUP BY comp_id
HAVING COUNT( sub_id ) = 3

如果需要名称,则将结果添加到| COMP_ID | |---------| | 1 | | 2 | 表中。

答案 1 :(得分:-1)

您可以通过选择comp_subs记录,并按sub_id分组所需的comp_id来获得输出,如下所示:

select comp_id
from comp_subs
where subs_id in (1,2,3)
group by comp_id;