我的模型看起来像这样:
我希望找到订购所有文章的所有客户。
我不知道我该怎么做!我试过这样但是没有帮助:
select distinct k.knr
from kunde_tab k
where ref(k) in (
select ref(k)
from bestellung_tab b,
bestelldetails_tab bd
where bd.bestellung=ref(b)
and bd.artikel in (select ref(ar) from artikel_tab ar)
);
翻译:
Kunde = Customer
Auftrag = Order
Teil= Articel
答案 0 :(得分:0)
无法判断您的引用的方式,但如果您的表格类似于:
客户 [id,name]
订单 [id,customerId,orderName,articleId]
文章 [id,articleName]
然后你可以进行加入:
select * from customer
join order on customerId = customer.id
join article on articleId = article.id
祝你好运。
答案 1 :(得分:0)
<强>未测试:强> 我无法理解桌子上的表现形式 我假设
所以:首先我生成一个内联视图z来简单地返回所有文章的计数
我们加入teil到auftrag作为左连接,以确保列出所有文章并让所有客户订购文章。 (部分或全部)
通过使用having子句,我们确保他们订购的文章的不同数量与所有文章的数量相匹配。
SELECT O.KNR, count(Distinct O.NR)
FROM teil A
LEFT JOIN Auftrag O
on A.NR = O.NR
CROSS JOIN (Select count(distinct NR) cnt from teil) z --always returns 1 record
GROUP BY O.KNR
HAVING count(Distinct o.nr) = z.cnt
逻辑上:
得到一个DISTINCT!客户订购的所有商品的数量。 将该计数与所有文章的计数进行比较。如果匹配,则返回客户,如果没有,则不为客户返回任何内容。
答案 2 :(得分:0)
看看是否有效:
select k.KNr, a.ANr
from Kunde k
inner join Auftrag a
on k.KNr = a.KNr
cross apply
(select distinct Nr from Teil) t
where t.Nr = a.Nr
group by KNr
having count(a.KNr) = (select count(distinct Nr) ctn from Teil)
答案 3 :(得分:0)
我明白了。这是解决方案:
WITH CTE AS
(
select ac.am, count(ac.am) as cou
from ( select k.knr as am ,t.refteil.bezeichnung,
count(t.refteil.teilenummer) from kunden k,table(k.auftraege) auf,
table(auf.positionen) t
group by t.refteil.bezeichnung,k.knr) ac
group by ac.am
)
select am from (select * from cte)
where cou =(select count(t.teilenummer) as coun
from Teile t);