我想创建一个子帐户系统(PHP& MYSQL)。
我有一个用户表(用户)和一个子用户表(sub_users)。
如何检查用户在用户表或子用户表中是否可用?
我的代码:
SELECT DISTINCT *
FROM users
WHERE userid = "steven"
OR WHERE EXISTS (SELECT *
FROM sub_users
WHERE sub_users.userid = "steven");
错误:检查“steven”附近的语法
也尝试过:
SELECT *
FROM users
LEFT JOIN sub_users
ON sub_users.user_userid = users.userid
WHERE users.userid = 'steven'
OR sub_users.userid = 'steven'
同样的错误。
答案 0 :(得分:4)
首先,您只需要一个where
子句。我也会使用单引号而不是双引号:
SELECT DISTINCT *
FROM users
WHERE userid = 'steven' or
EXISTS (SELECT *
FROM sub_users
WHERE sub_users.userid = 'steven'
);
如果您要从distinct
获取所有列,我怀疑您需要users
关键字。
您的第二个查询看起来不错。你确定你没有两次运行第一个查询吗?
编辑:
我想弄清楚你想要归来的东西。如果'steven'
出现在任一表中,则返回1,否则返回0:
select (case when exists (select 1 from users where users.userid = 'steven') and
exists (select 1 from sub_users where sub_users.userid = 'steven')
then 1
else 0
end);
此方法可节省join
的开销,并可轻松利用users(userid)
和sub_users(userid)
上的索引。
答案 1 :(得分:1)
select * from
(select * from users) x,
(select * from sub_users) y
where x.user_id = 'steven' or y.user_id = 'steven'
祝你好运!!!
答案 2 :(得分:1)
你也可以使用联盟:
(SELECT userid FROM users WHERE userid = 'steven')
UNION
(SELECT userid FROM sub_users WHERE userid = 'steven');