2

我想创建一个子账户系统(PHP & MYSQL)。

我有一个用户表 (users) 和一个子用户表 (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'

同样的错误。

4

3 回答 3

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);

这种方法节省了 a 的开销,join并且很容易利用和上的users(userid)索引sub_users(userid)

于 2013-09-10T20:21:42.290 回答
1
select * from
(select * from users) x,
(select * from sub_users) y
where x.user_id = 'steven' or y.user_id = 'steven'

祝你好运 !!!

于 2013-09-10T20:28:15.477 回答
1

您还可以使用联合:

(SELECT userid FROM users WHERE userid = 'steven')
UNION
(SELECT userid FROM sub_users WHERE userid = 'steven');
于 2013-09-10T20:30:40.093 回答