假设一个类似于约会网站的网络应用程序,其中每个配置文件可以有一个或多个用户。例如,每个用户都有以下列:姓名,年龄,性别。
我认为数据库设计类似于以下内容:
TABLE profile
=============================
| profile_id | name |
=============================
| 1 | Dynamic Duo |
-----------------------------
TABLE user
================================================
| user_id | profile_id | name | age | gender |
================================================
| 1 | 1 | Batman | 35 | Male |
------------------------------------------------
| 2 | 1 | Robin | 25 | Male |
------------------------------------------------
数据库设计是否良好?我如何查询以下内容:
如果数据库设计不能支持这样的查询,那么设计会是什么?
答案 0 :(得分:1)
我给了性别属性比特的类型。
第一个是;
-- All male
SELECT * FROM profiles p
WHERE p.id NOT IN
(SELECT u.profile_id FROM users u WHERE u.gender != 1);
第二
-- Male and female
SELECT * FROM profiles p
WHERE p.id IN
(SELECT u.profile_id FROM users u WHERE u.gender = 1)
AND p.Id IN
(SELECT u.profile_id FROM users u WHERE u.gender = 0)
第三种类似,只需将AND u.age > 20 AND u.age < 40
添加到两个子查询中。
第四;
-- Number of associated users above 2
SELECT *, count(p.id) AS user_count FROM profiles p
JOIN users u ON p.id = u.profile_id
GROUP BY p.id HAVING count(u.id) > 2