Mysql连接表

Mysql连接表,mysql,Mysql,数据库中有三个表 第一个表包含用户信息,如下所示: id | name | status --------------------------------------- 1 | john | 1 2 | helen | 1 3 | mike | 1 4 | tina | 1 5

数据库中有三个表

第一个表包含用户信息,如下所示:

    id     |     name   |     status    
---------------------------------------
    1      |    john    |      1
    2      |    helen   |      1
    3      |    mike    |      1
    4      |    tina    |      1
    5      |    jim     |      0
    6      |    nina    |      1
第二个表包含某些服务的注册用户:

   sid     |   status  
------------------------
    1      |     1
    2      |     1
第三个表包含其他服务的注册用户:

   oid     |   status  
------------------------
    3      |     1
    4      |     1
我应该进行一个查询,从第二个和第三个表中找到状态为“1”的所有用户,然后从第一个表中获得所有这些用户的名称和id(包含用户信息)。此示例的结果如下所示:

   id     |     name   |     status    
---------------------------------------
    1      |    john    |      1
    2      |    helen   |      1
    3      |    mike    |      1
    4      |    tina    |      1

这个查询会是什么样子?是否应使用内部联接?

这将返回用户的id、名称和状态,这些用户在第二个表(称为service1)中有一行状态为1,在第三个表(service2)中有一行状态为1:

select * from firsttable 
inner join table2 on id = sid and table2.status = 1
inner join table3 on id = oid and table3.status = 1
内部联接解决方案:

SELECT u.id, u.name, u.status
FROM users u
JOIN service1 s ON s.sid = u.id AND s.status=1
JOIN service2 o ON o.oid = u.id AND o.status=1;
SELECT u.* FROM users u
WHERE u.id IN (SELECT s.id FROM service1 s WHERE s.sid = u.id AND s.status=1)
AND u.id IN (SELECT s.id FROM service2 o WHERE o.oid = u.id AND o.status=1)
子查询解决方案:

SELECT u.id, u.name, u.status
FROM users u
JOIN service1 s ON s.sid = u.id AND s.status=1
JOIN service2 o ON o.oid = u.id AND o.status=1;
SELECT u.* FROM users u
WHERE u.id IN (SELECT s.id FROM service1 s WHERE s.sid = u.id AND s.status=1)
AND u.id IN (SELECT s.id FROM service2 o WHERE o.oid = u.id AND o.status=1)
第二个或第三个表中用户的子查询解决方案:

SELECT u.* FROM users u
WHERE u.id IN (SELECT s.id FROM service1 s WHERE s.sid = u.id AND s.status=1)
OR u.id IN (SELECT s.id FROM service2 o WHERE o.oid = u.id AND o.status=1)

内部连接
是正确的方法

问题是

SELECT user.id, user.name, user.status
FROM table1 AS user
INNER JOIN table2 AS service1 ON service1.sid = user.id
INNER JOIN table3 AS service2 ON service2.oid = user.id
WHERE service1.status = 1 AND service2.status = 1
如果您想要在service1或service2上的用户,查询可以是

SELECT user.id, user.name, user.status
FROM table1 AS user
WHERE user.id IN (SELECT sid FROM table2 WHERE status=1) OR
      user.id IN (SELECT oid FROM table3 WHERE status=1)

@user576875-我尝试使用此查询,但结果仅显示两个表(第二个表和第三个表)中的用户,而不是这两个表中的所有用户。添加了第三个查询,该查询应返回位于其中一个表中的用户tables@user576875-谢谢。这很有效。使用像这样的内部联接或查询并使用多个SELECT是否更好?