我需要一些查询方面的帮助。我想从三个不同的表中提取内容,这个表有不同的记录,所以 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/