我有以下两个表格,括号内有列:
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
但我没有得到预期的结果。有人能告诉我我的错误在哪里吗?
答案 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 )
您还可以使用UNION
和INNER 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