php - where 子句中的列 'code' 不明确

标签 php mysql sql

我需要一些查询方面的帮助。我想从三个不同的表中提取内容,这个表有不同的记录,所以 code 键与另一个表不同。该表包含登录凭据,我需要检查是否在几乎一个表中找到代码和电子邮件,这是一个示例:

$Query = "SELECT * FROM login_tb1, login_tb2, login_tb3
                  WHERE (code = '".mysql_real_escape_string($code)."') OR 
                        (email = '".mysql_real_escape_string($email)."') ";

现在,当我执行这个查询时,我得到这个错误:

Column 'code' in where clause is ambigous

我无法执行 JOIN,因为列代码不同,所有记录都不同。无论如何,所有表都具有相同的结构。我该如何解决这个问题?

谢谢。

最佳答案

我也花了一段时间才理解该错误消息。模棱两可真是个花哨的词。用人类语言来说,这意味着 MySQL 试图告诉您:“嘿伙计,该列存在于 select 子句中的多个表中,所以我不知道您指的是哪个表!”。你应该明确表:

$Query = "SELECT * FROM login_tb1, login_tb2, login_tb3
                  WHERE (login_tb1.code = '".mysql_real_escape_string($code)."') OR 
                        (login_tb1.email = '".mysql_real_escape_string($email)."') ";

如果你不关心哪个表和它们有相同的模式,你仍然需要显式,所以你的查询会更高级一点:

SELECT * FROM login_tb1 as l1, login_tb2 as l2, login_tb3 as l3
WHERE ( l1.code = 'code' OR l1.email = 'email' )
  OR  ( l2.code = 'code' OR l2.email = 'email' )
  OR  ( l3.code = 'code' OR l3.email = 'email' )

旁注:我不知道您的确切用例,但它似乎有点像一种反模式,您有多个具有看似相同架构的登录表。除非您有非常具体的理由不这样做,否则您应该将其保存在一个表中。

关于php - where 子句中的列 'code' 不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38522153/

相关文章:

php - 如何在 mPDF 中使用 bootstrap?

mysql - 如何在左连接查询中计数

php - MYSQL 结果不显示所有记录

sql - MSSQL2000 : get list of role members

php - 使用 PHP 从具有相同 ID 的 2 个表进行 MySQL JOIN

php - Pusher在生产服务器上不起作用-Laravel Broadcasting

mysql - 如何在MySQL中进行多个组计数

sql - PostgreSQL 无法加载库。未知错误 14001

php - 现场活跃用户数

php - 分别从两个单独的 MySQL 表中删除信息?