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

时间:2018-03-06 00:59:39

标签: mysql sql

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

每个表都有一个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?我不确定......

1 个答案:

答案 0 :(得分: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 '%test@email.com%' OR
      s.email LIKE '%test@email.com%';

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