2013-05-06 4 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) 
); 

Как найти адрес магазинов, которые посетили не менее 2 раз клиентом с именем 'john' ??Столы Oracle Sql 3 с условием подсчета и равным условием

ВЫБРАТЬ АДРЕС ОТ МАГАЗИНА ПРИРОДНЫЙ ПРИСОЕДИНЯЙТЕСЬ С ПОМОЩЬЮ ГДЕ КУПИТЬ (ВЫБРАТЬ ЦИКЛ ОТ КЛИЕНТА, КОГДА CNAME = 'john' GROUP BY CUSID ИМЕЕТ СЧЕТ (CUSID)> 2);

Я пробовал много видов соединений, кажется, что после того, как я поставил счет и равное условие вместе, мои результаты будут 0 строк.

+0

намека JOIN таблицы и пользователя ИНЕКЕ для ограничения строк – Randy

+2

Цели так, чтобы создать хранилище ответов * программирование * вопросы, которые будут представлять интерес для других людей. Это не домашнее задание по прокси-сервису. – APC

+0

ВЫБЕРИТЕ АДРЕС ОТ МАГАЗИНА ПРИРОДНЫЙ ПРИСОЕДИНЯЙТЕСЬ В ПОСЕЩЕНИИ ГДЕ КУПИТЬ (ВЫБРАТЬ КОРЗИЮ ОТ КЛИЕНТА, КОГДА CNAME = 'john' GROUP BY CUSID ИМЕЕТ СЧЕТ (CUSID)> 2); – user2351750

ответ

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

+0

Я добавил небольшую коррекцию, поэтому запрос не возвращает имена дубликатов магазинов – kyooryu