SQL在其他表中查找条件OR条件的行

时间:2018-03-27 14:28:56

标签: sql

我有以下两个表格,括号内有列:

users (id, active, permissions)
auths (id, user_id, active)

要查找我有此查询的活跃用户:

SELECT * FROM users WHERE users.active = 1 OR users.permissions IS NOT NULL

我想更改查询以便它不再考虑权限但它认为用户也是活动的,如果其关联的身份验证(如果存在)具有active = 1

我试过这个:

SELECT * FROM users 
LEFT JOIN auths ON auths.user_id = users.id
WHERE users.active = 1 OR auths.active = 1

但我没有得到预期的结果。有人能告诉我我的错误在哪里吗?

4 个答案:

答案 0 :(得分:0)

select
     *
from
     users
where
     users.active = 1 and
     exists(
          select 
               1 
          from 
               auths 
          where 
               auths.user_id = users.id and
               auths.active = 1
     )

答案 1 :(得分:0)

这应该有效:

SELECT * FROM users 
WHERE active = 1
OR id IN(SELECT user_id FROM auths WHERE active = 1 )

您还可以使用UNIONINNER JOIN

SELECT users.* FROM users
JOIN
(
    SELECT id FROM users 
    WHERE active = 1
    UNION
    SELECT user_id AS id FROM auths
    WHERE active = 1
) a on a.id = user.id

答案 2 :(得分:0)

基本上你将活跃用户减去aauth中具有active = 0的用户:

select * 
from users left join   (select * from auths where auths.active =0) tab2 on users.id = tab2.user_id
where tab2.user_id is null
and users.active = 1;

这有一些限制

SELECT * FROM users
WHERE active = 1
and id not in (SELECT user_id FROM auths WHERE active = 0)

答案 3 :(得分:-1)

CREATE TABLE users
(
    id             INT,
    ACTIVE         BIT,
    permission     BIT
)
CREATE TABLE auths
(
    id          INT,
    USER_ID     INT,
    ACTIVE      BIT
)

INSERT INTO users
VALUES
  (
    1,
    1,
    1
  ), (2, 0, 1), (3, 1, 1)
INSERT INTO auths
VALUES
  (
    1,
    1,
    1
  ), (2, 1, 1), (3, 1, 0)

SELECT *
FROM   users u
       INNER JOIN auths a ON  u.id = a.[user_id] AND a.active = 1
WHERE  u.active = 1

enter image description here