Mysql 选择与n_m表的内部联接

Mysql 选择与n_m表的内部联接,mysql,sql,select,Mysql,Sql,Select,我有以下三个表格: SELECT * FROM `users` INNER JOIN user_services ON users.id_user = user_services.id_user WHERE id_service=1 AND id_service=2 用户表 id_user| name | --------------- 1 | ... 2 | ... 服务表 id_service | name | ------------------- 1

我有以下三个表格:

SELECT * 
FROM  `users` 
INNER JOIN user_services ON users.id_user = user_services.id_user
WHERE id_service=1 AND id_service=2
用户表

id_user| name |
---------------
1      | ...
2      | ...
服务表

id_service | name |
-------------------
1          | ...
2          | ...
3          | ...
用户服务表(n-m)

我需要从“SELECT*from users”开始进行选择,然后通过服务获取用户。例如,我需要让每个用户都使用services=1和services=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


我能做什么?

为要检查的其他服务添加额外的连接:-

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
这就是你想要的吗

它显示用户的数据以及服务表中有多少服务。另一种可能性是:

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_服务一样多,所以如果服务的数量随着时间的推移而增加,这是没有意义的。相反,如果它是一个固定的数字,而不是一个大的数字,这可能是一个解决方案。

您的意思是用户必须同时连接到serive 1和serive 2?或者1或2?哦,很有趣。你现在能提供正确的答案吗。。。我需要将“service=1和service=2”放在别处,以获得附加服务的用户。
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;