2015-03-16 2 views
0

У меня возникли проблемы с написанием этого запроса. Я не знаю, действительно ли я должен использовать счет, потому что это возвращает фактический счет, и я хочу вернуть людей, которые не сделали обзор. В любом случае, вот мой запрос, который я пытаюсь написать.SQL-запрос с использованием агрегатных функций

Find those users that haven’t reviewed any businesses. 

Таблицы, которые я использую в

reviews; 
+-------------+---------+------+-----+---------+-------+ 
| Field  | Type | Null | Key | Default | Extra | 
+-------------+---------+------+-----+---------+-------+ 
| business_id | int(11) | NO | PRI | NULL |  | 
| user_id  | int(11) | NO | PRI | NULL |  | 
| review_id | int(11) | NO | PRI | NULL |  | 
| review_date | date | YES |  | NULL |  | 
| star_rating | int(1) | YES |  | 1  |  


businesses 
+--------------+--------------+------+-----+---------+-------+ 
| Field  | Type   | Null | Key | Default | Extra | 
+--------------+--------------+------+-----+---------+-------+ 
| business_id | int(11)  | NO | PRI | NULL |  | 
| name   | varchar(50) | YES |  | NULL |  | 
| city   | varchar(40) | YES |  | NULL |  | 
| state  | varchar(20) | YES |  | NULL |  | 
| full_address | varchar(120) | YES |  | NULL |  | 

users; 
+------------+-------------+------+-----+---------+-------+ 
| Field  | Type  | Null | Key | Default | Extra | 
+------------+-------------+------+-----+---------+-------+ 
| user_id | int(11)  | NO | PRI | NULL |  | 
| name  | varchar(50) | YES |  | NULL |  | 
| user_since | date  | YES |  | NULL 

Вот то, что я до сих пор

SELECT reviews.user_id FROM reviews 
JOIN businesses ON (reviews.business_id = businesses.business_id) 
GROUP BY reviews.user_id ASC 
HAVING COUNT(*) > 0; 

Это возвращает 0 результатов, и я не думаю, что это правильно, потому что кто-то может быть пользователя и не писать отзыв. Но я не знаю, что еще мог. Спасибо

EDIT: Я понял, что последний запрос, но теперь я пытаюсь завершить этот!

Find the users that have reviewed every business. 
+0

после 'ON' вы имеете' reviews.business_id' дважды. Попробуйте переключить его на 'business.business_id' –

+0

Если ваш EDIT задает другой вопрос, создайте новое сообщение, не добавляйте его к этому. Кроме того, используйте 'SHOW CREATE TABLE', это более описательно, чем' DESCRIBE TABLE'. –

ответ

1

Вы хотите, чтобы таблица пользователей не являлась бизнес-таблицей.

По левую сторону, соединяющую таблицу отзывов с таблицей пользователей, мы говорим - заставьте меня всех пользователей, и если они не оставили отзыв, просто оставьте эти столбцы как NULL. то в предложении where мы выбираем только те результаты, в которых столбцы обзора являются нулями, тем самым выбирая пользователей, которые не оставили обзор.

select u.User_ID 
from 
    users u 
    left join reviews r 
     on r.user_id = u.user_id 
where r.review_id is null 
+0

Это не работало для меня. Не могли бы вы это объяснить? Я добавлю таблицу пользователя в OP –

+0

Когда вы скажете, что это не сработало - что случилось? ошибка? неожиданные результаты? –

+0

ОШИБКА 1052 (23000): Столбец 'user_id' в списке полей неоднозначен –

0
SELECT u.* 
FROM users u 
WHERE NOT EXISTS (SELECT 'a' 
        FROM reviews r 
        WHERE r.user_id = u.user_id 
       ) 
+1

Немного объяснений было бы полезно. – showdev

Смежные вопросы