首页 > 解决方案 > 选择适用于所有干预措施的产品

问题描述

你好,我的问题对你的一些人来说很简单^^

我有一个表格产品、参考和干预。当有干预时,表格参考在我们需要干预的产品和干预之间建立联系。

我想知道如何搜索已参与所有干预的产品。

这是我的桌子:

--TABLE products
create table products (
 reference char(5) not null  check ( reference like 'DT___'),
 designation char(50) not null,
 price numeric (9,2) not null,
 primary key(reference) );

-- TABLE interventions

create table interventions ( 
    nointerv integer not null ,
    dateinterv date not null,
    nameresponsable char(30) not null,
    nameinterv char(30) not null,
    time float not null check ( temps !=0 AND  temps between 0 and 8),
    nocustomers integer not null ,
    nofact integer not null ,
    primary key( nointerv),
    foreign key( noclient) references customers,
    foreign key (nofacture) references facts 
);

-- TABLE replacements

create table replacements (
    reference char(5) not null check ( reference like 'DT%'),
    nointerv integer not null,
    qtereplaced smallint,
    primary key ( reference, nointerv ),
    foreign key (reference) references products,
    foreign key(nointerv) references interventions(nointerv) 
);

--编辑:这是从我的替换表中选择的 表替换

我们可以在这张图片中看到产品 DT802 用于每次干预谢谢 ;)

标签: sql

解决方案


这将显示 1 行干预 - 产品。这是你期待的吗?

select interventions.nointerv, products.reference
from interventions
inner join replacements on interventions.nointerv = replacements.nointerv
inner join products on replacements.reference = products.reference;

这个?

select products.reference, products.designation
from interventions
inner join replacements on interventions.nointerv = replacements.nointerv
inner join products on replacements.reference = products.reference
group by products.reference, products.designation
having count(*) = (select count(*) from interventions);

推荐阅读