小编典典

SQL-检查任一表上是否存在数据

sql

我的数据库中有两个表,分别用于我的两个用户(图书馆员和学生)的登录详细信息。我已将用户的详细信息分为两个单独的表tblUserLibrarian和tblUserStudent;一个给图书馆员,另一个给学生。每个表中的主键是用户名或ID(LibrarianID和StudentID)。

这些表的概要如下:

tblUserStudent

StudentID   Password     FirstName    LastName

S1201235    pass3           Jane       Smith
S1201289    pass5           Pass       Word
S1202009    pass2           John       Smith

tblUserLibrarian

LibrarianID Password

L1094565    pass4
L1202836    password123
L1202908    qwerty
L1212345    pass3

我有一个问题,当任何一个用户尝试使用其用户名(即其ID)登录时。我想检查它们的用户名是否存在于任一表中,并从存在该用户名的表中返回所有字段。目前,我只能想到一种方法来执行2个查询来检查此内容,但是我认为可以在一个查询中完成。我查找了JOINS和UNIONS,但是我尝试的所有操作似乎均不起作用。

我最近的查询是:

SELECT TOP 1 * FROM tblUserStudent,tblUserLibrarian
WHERE StudentID = "S1202836" OR LibrarianID = "S1202836"

但这会从两个表中返回行,如果用户输入的用户名存在,我只想从一个表中返回用户的详细信息。

我正在使用MS Access 2010进行查询。


阅读 185

收藏
2021-04-14

共1个答案

小编典典

您的表没有相同的结构。您可以对两个表都执行UNION ALL来执行查询,但是只返回一些关于图书馆员的信息:

SELECT TOP 1 * 
FROM(
  SELECT studentId AS userID, password, firstName, LastName
  FROM tblUserStudent 
  WHERE StudentID = 'S1201235'
  UNION ALL
  SELECT LibrarianID,password, NULL, NULL
  FROM tblUserLibrarian 
  WHERE LibrarianID = 'S1201235'
) a

[sqlfiddle demo](http://sqlfiddle.com/#!3/2f747/7) (sql服务器,但仅作为示例)

我向ID的列添加了别名,以向您显示userID而不是StudentID,因为UNION从第一个SELECT中获取列名。

我也离开了TOP 1,但是如果您的ID是唯一的,那么您应该只收到一个ID,因此无关紧要

2021-04-14