2013-05-06 84 views
-3
CREATE TABLE CUSTOMER (
CUSID VARCHAR(25) NOT NULL, 
CNAME VARCHAR(50), 
CONSTRAINT CUSTOMER_PKEY PRIMARY KEY (CUSID), 
); 

CREATE TABLE SHOP (
SHOPID VARCHAR(10) NOT NULL, 
ADDRESS VARCHAR(25), 
CONSTRAINT SHOP_PKEY PRIMARY KEY (SHOPID), 
); 

CREATE TABLE VISIT (
CUSID VARCHAR(25) NOT NULL, 
SHOPID VARCHAR(10) NOT NULL, 
VDATE DATE  NOT NULL, 
CONSTRAINT VISIT_PKEY PRIMARY KEY (CUSID, SHOPID, VDATE), 
CONSTRAINT VISIT_FKEY1 FOREIGN KEY (CUSID) REFERENCES CUSTOMER(CUSID), 
CONSTRAINT VISIT_FKEY2 FOREIGN KEY (SHOPID) REFERENCES SHOP(SHOPID) 
); 

如何找到已被访问过至少两次由名为'john'的客户访问的商店的地址? (CUSID> 2)的CNAME ='约翰'GROUP BY CUSID的SELECT CUSID(CUSID FROM CUSTOMER WHERE CNAME ='john'GROUP BY CUSID HAVING COUNT(CUSID)> 2);选择地址从商店天然加入访问。具有计数条件和等条件的Oracle Sql 3表

我已经尝试了很多种连接,似乎在我把count和equal条件放在一起之后,我的结果将会是0行。

+0

提示连接表和用户的WHERE子句限制 – Randy 2013-05-06 12:22:41

+2

的SO的目的是建立答案的存储库中的行*编程*这将是感兴趣的其他人的问题。这不是代理服务的功课。 – APC 2013-05-06 12:25:12

+0

选择地址从商店天然加入访问在哪里CUSID(选择CUSID从客户那里CNAME ='约翰'GROUP BY CUSID具有COUNT(CUSID)> 2); – user2351750 2013-05-06 12:29:25

回答

1
SELECT DISTINCT s.address 
    FROM shop s 
    JOIN visit v ON s.shopid = v.shopid 
    JOIN customer c ON v.customerid = c.customerid 
    WHERE c.cname = 'John' 
    GROUP BY 
    s.address 
    , c.customerid 
    HAVING COUNT(*) > 1 
+0

非常感谢...搞乱了我的团队,并有逻辑......做了很多那里有错误。 – user2351750 2013-05-06 12:49:48

+0

我添加了一个小的更正,以便查询不会返回重复的商店名称 – kyooryu 2013-05-06 13:06:39