检查数据是否存在于多个表中

时间:2019-10-30 17:45:03

标签: mysql union

我有两个表,其中包含用户的登录凭据。

一个表包含管理员用户的凭据,另一个表包含非管理员用户。管理员和非管理员用户使用相同的登录页面。用户登录时,我需要检查该用户是管理员用户还是非管理员用户,以显示正确/相关的内容。

我尝试了许多查询,但无法这样做。

这是我在STackoverflow上找到的最新代码,但未显示任何语法错误结果:

SELECT TOP 1 from
(
 SELECT aes_decrypt(NonAdminEmail, 'SALT') as email from NonAdminUsers     WHERE aes_decrypt(NonAdminEmail, 'SALT') = 'email@domain'
  UNION ALL
  SELECT aes_decrypt(Admin_Email, 'SALT') as email from AdminUsers WHERE     aes_decrypt(Admin_Email, 'SALT') = 'demail@domain'
) a

我也尝试过:

SELECT aes_decrypt(NonAdminEmail, 'SALT') as User, password 
FROM NonAdminUsers 
WHERE  aes_decrypt(NonAdminEmail, 'SALT') ='$username' AND password='$password' 
UNION 
SELECT aes_decrypt(Admin_Email, 'SALT') as User, password 
FROM AdminUsers 
WHERE username='email@domain.com' AND password='$password

编辑:

表的轮廓如下:

NonAdmin

NonAdmin_ID   Password        NonAdminEmail     

001           pass3           email1@domain.com       
001           pass5           email2@domain.com
003           pass2           email3@domain.com

AdminUsers

AdminUserID   Pass            AdminEmail

A001           Apass1         adminemail1@domain
A002           Apass2         adminemail2@domain
A003           Apass3         adminemail3@domain

我要检查电子邮件和密码组合是否在两个表中

1 个答案:

答案 0 :(得分:1)

  

我需要检查用户是管理员用户还是非管理员用户才能显示   正确/相关内容

使用EXISTS

select
  case
    when exists (
      select 1 from AdminUsers 
      where aes_decrypt(AdminEmail, 'SALT') = '?' and Pass = '?'
    ) then 'Admin'
    when exists (
      select 1 from NonAdmin 
      where aes_decrypt(NonAdminEmail, 'SALT') = '?' and Password = '?'
    ) then 'Non Admin'
    else 'Unknown'
  end result

用您要检查的值替换'?'