[英]Selecting across multiple tables with UNION
我將我的數據庫從一個用戶表重新tblStudents
為多個用戶表(按角色划分): tblStudents
, tblTeachers
, tblAdmin
登錄時,我不想運行三個查詢來檢查用戶是否存在於我的數據庫中的某個位置。 所以我所做的是將以下查詢與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 = "admin@admin.be"
(此電子郵件存在於我的數據庫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 = "admin@admin.be"
記錄have id = 1
但我不明白為什么當我在管理員電子郵件地址上過濾時會選擇學生記錄。 為什么是這樣? 有人可以解釋並為我提供更好的解決方案嗎? 我基本上有一個登錄表單,需要跨多個表選擇以檢查用戶是否存在於我的數據庫中。
感謝您更新查詢; 現在我們可以看到WHERE條件僅應用於最后一個 UNIONed查詢。 您需要可以添加WHERE子句每個查詢,或者把它包裝成一個子查詢和WHERE子句應用到這一點。
select s.id as id, s.email as email, s.password as password, s.role as role from tblStudents s
where email = "admin@admin.be"
union
select a.id as id, a.email as email, a.password as password, a.role as role from tblAdmin a
where email = "admin@admin.be"
union
select t.id as id, t.email as email, t.password as password, t.role as role from tblTeachers t
where email = "admin@admin.be"
要么
SELECT * FROM (
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
) foo where email = "admin@admin.be"
SELECT
R.co_C,
company3.Statuss
FROM
(
SELECT
company1.co_C
FROM
company1
UNION ALL
SELECT
company2.co_C
FROM
company2
) AS R
LEFT JOIN company3 ON R.co_C = company3.co_A;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.