2016-01-14 48 views
0

我的模型看起來像這樣的客戶:我怎麼能找到所有誰下令所有文章

enter image description here

,我想找到所有誰下令所有文章客戶。

我不知道我該怎麼做!我試了一下這樣的,但並沒有幫助:

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

不能告訴你去參考哪種方式,但如果你有表是這樣的:

客戶 [ID,名稱]

訂購 [ID,客戶ID,ORDERNAME,條款ArticleID]

文章 [ID,ArticleName的]

那麼你可以做一個加入:

select * from customer 
join order on customerId = customer.id 
join article on articleId = article.id 

好運。

0

未經測試: 我無法理解桌子上的情況。
我假設

  1. kunde.knr是定做的KNR
  2. teail.nr是定做的NR

所以:首先,我產生一個內嵌視圖Z到簡單的返回所有文章的計數

我們加入teil to 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 

所以邏輯:

得到清晰的!客戶訂購的所有物品的數量。 將該計數與所有文章的計數進行比較。如果他們匹配,退還客戶,如果沒有,則不向客戶返回任何東西。

+0

謝謝你生病嘗試,並會告訴如果它的作品或不 – user3232446

+0

可惜這Querie行不通的! – user3232446

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) 
+0

不幸的是這Querie不工作! – user3232446

+0

如果這些表中沒有PK-FK關係約束,我建議您添加它們。 – joordan831

+0

這是一個面向對象的數據庫方法,而不是PK-FK我們使用的對象引用 – user3232446

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); 
相關問題