簡體   English   中英

連接和查詢具有沖突列名的兩個表

[英]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%'

但是當然這是行不通的,因為WHERESELECT之前查找原始列名。

如何解決這個問題而又不獲取所有行和循環信息? 也許是工會,而不是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM