2014-03-03 102 views
0

我有這三個表:涉及多個表之間關係的SQL查詢。 SQLITE3

create table Nation ("nationkey" integer, 
        "name" text, 
        "regionkey" integer, 
        "comment" text, 
        "null" text, 
        foreign key (regionkey) references Region); 

create table Supplier ("suppkey" integer, 
         "name" text, 
         "address" text, 
         "nationkey" integer, 
         "phone" text, 
         "acctbal" real, 
         "comment" text, 
         "null" text, 
         foreign key (nationkey) references Nation); 

create table Customer ("custkey" integer, 
         "name" text, 
         "address" text, 
         "nationkey" integer, 
         "phone" text, 
         "acctbal" real, 
         "mktsegment" text, 
         "comment" text, 
         "null" text, 
         foreign key (nationkey) references Nation); 

我必須寫一個SQL查詢返回比供應商更多的客戶國家的名字。查詢需要在Sqlite3中。我對sql很陌生,不確定如何去做這件事。

+2

做一些調查研究,並給它一試。如果您遇到問題,請發佈您的SQL,我們會盡力提供幫助。 http://stackoverflow.com/help/how-to-ask –

+1

您將需要'JOIN','GROUP BY','COUNT'和'HAVING'。祝你好運! –

+0

如果您有這些表格的測試數據和預期結果,請將此信息添加到您的帖子中。 –

回答

0

對於特定的民族鍵,就可以得到相應的客戶的數量與COUNT:

SELECT COUNT(*) 
FROM Customer 
WHERE nationkey = ? 

同一作品的供應商。

然後,您可以使用這些COUNT查詢作爲correlated subqueries這些值爲每個Nation記錄比較:

SELECT name 
FROM Nation 
WHERE (SELECT COUNT(*) 
     FROM Customer 
     WHERE nationkey = Nation.nationkey) > 
     (SELECT COUNT(*) 
     FROM Supplier 
     WHERE nationkey = Nation.nationkey) 
0

使用明確JOIN是另一個可能的解決方案:

SELECT n.name 
FROM Nation n 
JOIN Customer c ON n.nationkey = c.nationkey 
JOIN Supplier s ON n.nationkey = s.nationkey 
GROUP BY n.name 
HAVING COUNT(c.nationkey) > COUNT(s.nationkey)