我的数据库中有两个表,分别用于我的两个用户(图书馆员和学生)的登录详细信息。我已将用户的详细信息分为两个单独的表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进行查询。
您的表没有相同的结构。您可以对两个表都执行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服务器,但仅作为示例)
[sqlfiddle demo](http://sqlfiddle.com/#!3/2f747/7)
我向ID的列添加了别名,以向您显示userID而不是StudentID,因为UNION从第一个SELECT中获取列名。
我也离开了TOP 1,但是如果您的ID是唯一的,那么您应该只收到一个ID,因此无关紧要