[英]Joining and querying two tables with conflicting column names
想象一下,我有兩個表: 用戶和學生
每個表都有一個id和email列。 我希望能夠從兩個表中搜索電子郵件。 我可以加入兩個ID匹配的表,如下所示:
SELECT users.email,students.email as student_email FROM users
INNER JOIN students ON users.id = students.id
我無法搜索電子郵件列,因為它們具有相同的列名(電子郵件)。 因此,如果我嘗試使用WHERE
它將抱怨列(電子郵件)不明確。 如果嘗試使用student_email,它會抱怨該列不存在。
如果兩個表沒有使用相同的列名(電子郵件),那么當我使用WHERE
時就可以了。
我能想到的唯一解決方案是獲取所有行,然后在它們周圍循環並手動搜索電子郵件字符串。 與像這樣使用MySQL相比,這非常慢:
SELECT users.email,students.email as student_email FROM users
INNER JOIN students ON users.id = students.id
WHERE email LIKE '%test@email.com%' OR student_email LIKE '%test@email.com%'
但是當然這是行不通的,因為WHERE
在SELECT
之前查找原始列名。
如何解決這個問題而又不獲取所有行和循環信息? 也許是工會,而不是JOIN
? 我不確定...
只需使用合格的列名。 我還建議使用表別名:
SELECT u.email, s.email as student_email
FROM users u INNER JOIN
students s
ON u.id = s.id
WHERE u.email LIKE '%test@email.com%' OR
s.email LIKE '%test@email.com%';
只要查詢中有多個表,就應始終限定所有列名。 使用表的縮寫作為表別名可以使查詢更易於編寫和閱讀。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.