SQL:检查tbl1或tbl2中的值是否可用

时间:2013-09-10 20:19:44

标签: php mysql sql

我想创建一个子帐户系统(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'

同样的错误。

3 个答案:

答案 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');