2011-01-20 19 views
1

私はしばらくの間この問題を抱えていました。最初に私は私のシステムでは4つのテーブルが複雑なロジックのSQLクエリ(pl/sql)

ドメイン

Columns: 
     DomainID (primary key) 
     DomainName 

Data: 
     DomainID DomainName 
     1000  Google.com 
     2000  mySql.com 

のWebPage

Columns: 
     WebpageID (primary key) 
     WebpageName 
     DomainID (FK from domain table) 
Data: 
    5001 SearchPage.html 1000 
    5002 Welcome.html  1000 
    5003 ContactUs.htm  1000 
    5004 AboutUs.html  1000 
あり

テーブル構造を説明しますドメインに各Webページ: この表には、プラグインの各ドメイン

Columns: 
     PluginType  (primary key) 
     DomainID  (primary key) 
     PluginTypeName 

    Data 
     PluginTypeID  DomainID  PluginTypeName 
     8000     1000    searchButton 
     8001     1000    DropDownMenu 
     8002     1000    InteractiveForm 
     8003     1000    loginForm 
     8004     1000    LogoutForm 

プラグインで使用可能なタイプをリスト10

PluginType(Webページに追加することができPluginsType)任意の数のプラグインを使用できます。

 Columns: 
      PluginID  (primary key) 
      WebpageID (FK from webpage table) 
      pluginTypeID (FK from plugintype table) 

     Data: 
     pluginID  WebpageID(Name)   PluginTypeID 
      10001    5001(SearchPage.html) 8000(SearchButton) 
      10002    5001(SearchPage.html) 8001(DropDownMenu) 
      10003    5002 (Welcome.html)  8000 (SearchButton) 
      10004    5002 (Welcome.html)  8001 (DropDownMenu) 
      10005    5002 (Welcome.html)  8004 (lotoutform) 
      10006    5003 (ContactUs.htm) 8003 (loginForm) 
      10007    5004 (AboutUs.htm)  8002 (loginForm) 

今、私が欲しいものは、ドメインID与えられた、ですが、私はプラグインが複数のWebページに繰り返されないように、すべてのウェブページ - プラグインのリストが使用可能にします。 別の言い方をすると、プラグインが複数のWebページで繰り返されないように、各プラグインのWebページ - プラグインの組み合わせ。

だから、ドメイン1000(google.com)

私が望む結果は、彼らがために、すべてのプラグインが含まれているため、私は、唯一の5002と5003のWebページを選択した

  5002 (Welcome.html)  8000 (SearchButton) 
      5002 (Welcome.html)  8001 (DropDownMenu) 
      5002 (Welcome.html)  8004 (lotoutform) 
      5003 (ContactUs.htm) 8003 (loginForm) 

ですドメイン1000(google.com)。 もう1つのことがあります。ただ1つのプラグインでWebページを選択することをお勧めします。しかし、私はこの嗜好なしに解決策を見つけることに興味があり、後で解決策を改善することができます。

あなたはそのプラグインタイプがあるサンプル・ページと一緒に、あなたはプラグインタイプごとに1つの行を返すされているので、あなたがドメイン上のすべてのプラグインtypessを必要とし、他の視点からそれを見ることができます
+0

"DISTINCT"コマンドを探していますか? – Eugene

+0

具体的にはどのデータベースですか?構文は100%同じではありません –

答えて

2

よく、plugedイン、の線に沿って何か:

Select PluginTypeName, 
    (select top 1 WebpageName 
    from WebPage w 
     inner join Plugin p on p.WebpageID = w.WebpageID 
    where p.pluginTypeID = pt.pluginTypeID) as SampleWebPage 
From PluginTypes pt 

このようなものを返します:(SWekoから提出された)結果の上に

searchButton SearchPage.html 
DropDownMenu SearchPage.html 
InteractiveForm null 
loginForm  ContactUs.html 
lotoutform  Welcome.html    
+0

ありがとうSweko、この問題を解決する良いアプローチthats! – Maximus

1
SELECT PluginTypeId, 
     (
     SELECT webpageID 
     FROM plugin pi 
     WHERE pi.pluginTypeId = pd.pluginTypeId 
       AND webPageID IN 
       (
       SELECT WebPageID 
       FROM WebPage 
       WHERE DomainId = 1000 
       ) 
     ORDER BY 
       (
       SELECT COUNT(*) 
       FROM plugin pc 
       WHERE pc.webpageId = pi.webpageId 
       ) 
     LIMIT 1 
     ) AS WebPageId 
FROM Plugin pd 
WHERE WebPageId IS NOT NULL 
0

が動作するはずです、私はそれをしようとしていた、かもしれません繰り返される結果を与える。また、ドメインごとに結果をグループ化します...

Select DISTINCT DomainID, pt.PluginTypeName, 
    (select top 1 WebpageName 
    from WebPage w 
     inner join Plugin p on p.WebpageID = w.WebpageID 
    where p.pluginTypeID = pt.pluginTypeID) as SampleWebPage 
From PluginTypes pt 
GROUP BY DomainID, pt.PluginTypeName