连接和查询具有冲突列名的两个表

问题描述 投票:0回答:1

想象一下,我有两个表:用户和学生

每个表都有一个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 '%[email protected]%' OR student_email LIKE '%[email protected]%'

但当然这不起作用,因为WHERESELECT之前寻找原始列名。

如何在不获取所有行和循环的情况下解决这个问题?也许这是一个联盟,而不是一个JOIN?我不确定...

mysql sql
1个回答
4
投票

只需使用限定列名称即可。我还推荐表别名:

SELECT u.email, s.email as student_email
FROM users u INNER JOIN
     students s
     ON u.id = s.id
WHERE u.email LIKE '%[email protected]%' OR
      s.email LIKE '%[email protected]%';

只要查询中有多个表,就应该始终限定所有列名。将表的缩写用作表别名使查询更容易编写和读取。

© www.soinside.com 2019 - 2024. All rights reserved.