我返工從一個用戶表我的數據庫,多個用戶表(每個角色分):tblStudents
,tblTeachers
,tblAdmin
選擇跨多個表與UNION
登錄時,我不想跑三個查詢檢查用戶是否存在於我的數據庫中的某個地方。所以我所做的就是放在一起以下查詢與union
select s.id as id, s.email as email, s.password as password, s.role as role from tblStudents s
union
select a.id as id, a.email as email, a.password as password, a.role as role from tblAdmin a
union
select t.id as id, t.email as email, t.password as password, t.role as role from tblTeachers t
這將選擇所有所有表相同的字段和結果輸出很好地爲我。
所以,我決定嘗試這個,出於某種原因,我的登錄表單不起作用。對於我的登錄表單,我添加了一個where
子句,用於檢查電子郵件地址。我在我的數據庫應用程序中運行了查詢,出乎意料的是,當我做例如where email = "[email protected]"
(該電子郵件存在於我的數據庫tblAdmin
中)時,它還從我的學生表中選擇一條記錄。
隨着where子句:
select s.id as id, s.email as email, s.password as password, s.role as role from tblStudents s
union
select a.id as id, a.email as email, a.password as password, a.role as role from tblAdmin a
union
select t.id as id, t.email as email, t.password as password, t.role as role from tblTeachers t
where email = "[email protected]"
這些記錄都have id = 1
,但我不明白爲什麼當我在管理員的電子郵件地址進行過濾,將選擇的學生記錄。爲什麼是這樣?有人能解釋併爲我提供更好的解決方案嗎?我基本上有一個登錄表單,並需要選擇跨多個表來檢查用戶是否存在於我的數據庫。
這並不似乎是完整的查詢,因爲在它裏面沒有過濾。你能發佈整個查詢嗎? – 2011-05-20 00:11:46
認爲這將是明確的;更新與其他查詢:) – cabaret 2011-05-20 00:13:28
我注意到你沒有把字符串放在引號中。這是一個錯誤嗎? – roberttdev 2011-05-20 00:13:51