2015-09-20 2 views
-1

Я новичок в SQL, и мне интересно, можно ли поставить условие после предложения WHERE. Более конкретно, я пытаюсь выяснить, «какой предмет был продан двум людям» в моей базе данных.SQL-запрос - как положить условия в предложение WHERE

Мне удалось соединить все предметы, которые были проданы людям, и хотите условие, которое дает только предметы, которые были проданы двум людям. Я попытался использовать COUNT(customer_id) в статье WHERE, но он дает «агрегаты, которые не разрешены в предложении WHERE».

Edit:

базы данных таблицы:

books((book_id), title, author_id, subject_id) 
publishers((publisher_id), name, address) 
authors((author_id), last_name, first_name) 
stock((isbn), cost, retail_price, stock) 
shipments((shipment_id), customer_id, isbn, ship_date) 
customers((customer_id), last_name, first_name) 
editions((isbn), book_id, edition, publisher_id, publication_date) 
subjects((subject_id), subject, location) 

и мой текущий запрос является:

SELECT title, first_name, last_name 
FROM books, shipments, customers, editions 
WHERE books.book_id = editions.book_id 
AND editions.isbn = shipments.isbn 
AND shipments.customer_id = customers.customer_id 
AND COUNT(customers.customer_id) = 2; 

Спасибо всем!

+0

база данных: книги ((book_id), название, author_id, subject_id) издатели ((publisher_id), имя, адрес) авторов ((AUTHOR_ID), last_name, first_name) запас ((ISBN), стоимость , retail_price, акции) поставки ((shipment_id), customer_id, ISBN, ship_date) клиентов ((customer_id), last_name, first_name) издания ((ISBN), book_id, издание, publisher_id, publication_date) предметы ((subject_id) , предмет, местоположение) – Ptru

+0

и мой текущий запрос: SELECT title, first_name, last_name ОТ книг, отгрузок, клиентов, изданий WHERE books.book_id = editions.book_id AND editions.isbn = shipmentments.isbn И ши pments.customer_id = clients.customer_id И COUNT (customers.customer_id) = 2; – Ptru

+1

Функции агрегатов могут применяться только в SELECT & HAVING CLAUSE. –

ответ

2

Вы должны использовать HAVING положение, например:

SELECT column_name, aggregate_function(column_name) 
FROM table_name 
WHERE column_name operator value 
GROUP BY column_name 
HAVING aggregate_function(column_name) operator val 

у.е;

+0

Спасибо! Это решило! – Ptru

+0

Хорошо! пожалуйста, проголосуйте и отметьте правильный ответ. –

+0

Я собирался поддержать этот ответ, пока не прочитаю ваш запрос голосов. Затем я передумал. –

0

Вы должны научиться использовать соответствующие join синтаксиса и таблицы псевдонимов:

SELECT b.title, c.first_name, c.last_name 
FROM books b join 
    editions e 
    on b.book_id = e.book_id join 
    shipments s 
    on e.isbn = s.isbn join 
    customers c 
    on s.customer_id = c.customer_id 
GROUP BY title, first_name, last_name 
HAVING COUNT(customers.customer_id) = 2; 

Ответ на ваш вопрос является HAVING пункт вместе с GROUP BY.

+0

Я посмотрю! благодаря! – Ptru