我在编写此查询时遇到问题。我不知道我是否应该实际使用计数,因为它返回实际计数,我想返回那些没有进行过审核的人。无论如何,这是我想写的查询。
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结果,我不认为这是正确的,因为有人可以成为用户而不是撰写评论。但我不知道我能做什么。感谢
编辑:我想出了最后一个查询,但现在我正在尝试完成这个!Find the users that have reviewed every business.
答案 0 :(得分:1)
您希望users表不是业务表。
通过将评论表添加到我们所说的用户表中 - 让我所有用户,如果他们还没有留下评论,只需将这些列留为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
答案 1 :(得分:0)
SELECT u.*
FROM users u
WHERE NOT EXISTS ( SELECT 'a'
FROM reviews r
WHERE r.user_id = u.user_id
)