我有三张表如下:
USERS TABLE
id_user| name |
---------------
1 | ...
2 | ...
服务表
id_service | name |
-------------------
1 | ...
2 | ...
3 | ...
USER_SERVICES表(n-m)
id_user | id_service
--------------------
1 | 1
1 | 2
2 | 1
我需要从" SELECT * FROM users"开始进行SELECT。然后,通过服务获取用户。防爆。我需要让每个用户的服务= 1和服务= 2(也许他还有其他服务,但肯定是1和2)。
我做了以下事情:
SELECT *
FROM `users`
INNER JOIN user_services ON users.id_user = user_services.id_user
WHERE id_service=1 AND id_service=2
但是,这当然不行,因为没有一条记录匹配service = 1和service = 2.
我该怎么办?
答案 0 :(得分:1)
为您要检查的其他服务添加额外的联接: -
SELECT *
FROM `users`
INNER JOIN user_services us1 ON users.id_user = us1.id_user AND us1.id_service=1
INNER JOIN user_services us2 ON users.id_user = us2.id_user AND us2.id_service=2
答案 1 :(得分:0)
select t.*,
(select count(*) from user_services where id_user = t.id_user) how_much
from users t;
这就是你想要的???
它显示了用户的数据以及服务表中的服务数量。其他可能性是:
select t.*,
(case when (select count(*)
from user_services where id_user = 1) > 0
then 'service1'
else 'null'
end) has_service_1
from users t;
这个选择的问题在于你必须重复这种情况...结束与你拥有的id_services一样多的时间,所以如果服务的数量随着时间的推移而增加则没有意义。相反,如果它是一个有点固定的数字,并且它不是一个大数字,这可能是一个解决方案。