使用JOIN时SQL语法不正确

时间:2018-09-06 10:58:02

标签: mysql sql join

在我的数据库中,我有2个表。一种用于用户登录信息,另一种用于常规信息。

我正在尝试编写一个查询,该查询将从FK“ users_id”与登录的用户ID相同的行中选择“ firstname”列。

在PHP Im中执行任何操作之前,我将在数据库中运行查询,因此登录的用户ID(通常是变量)将替换为我的testuser的ID。

这是我的查询

SELECT b6vjp_user_info.firstname 
          FROM b6vjp_user_info 
          WHERE b6vjp_user_info.users_id LIKE 243
          INNER JOIN b6vjp_users ON b6vjp_user_info.users_id=b6vjp_users.id;

这是我的(出于安全原因被审查)登录表,名称为“ b6vjp_users”:

enter image description here

这是我的另一个名为“ b6vjp_user_info”的表:

enter image description here

错误是:

#1064 - Mistake in SQL-Syntax. 'INNER JOIN b6vjp_users ON b6vjp_user_info.users_id=b6vjp_users.id LIMIT 0, 25' on row 4

现在我翻译了一下,因为我的工作环境是德语。但我确定您知道什么是语法错误。

无论如何,我一遍又一遍地检查查询的JOIN部分,并在W3Schools上查找了JOIN教程。但是没有明显错误。

有人看到我以某种方式失败了吗?

3 个答案:

答案 0 :(得分:1)

WHERE子句放在(最后一个)ON子句之后。

答案 1 :(得分:0)

您必须在where子句之后放置on

  SELECT b6vjp_user_info.firstname 
              FROM b6vjp_user_info                   
              INNER JOIN 
              b6vjp_users ON  
              b6vjp_user_info.users_id=b6vjp_users.id
              WHERE b6vjp_user_info.users_id =243 // i think it int field so no need to use like operator

答案 2 :(得分:0)

我强烈建议使用表别名。您还需要修复SQL子句的顺序。所以:

SELECT ui.firstname 
FROM b6vjp_user_info ui JOIN
     b6vjp_users u
     ON ui.users_id = u.id
WHERE ui.users_id = '243';

或者,更简单地说,没有JOIN

SELECT ui.firstname 
FROM b6vjp_user_info ui 
WHERE ui.users_id = '243';

注意:

  • LIKE的操作数应为字符串。因此,使其成为字符串!隐式类型转换会导致各种问题。
  • 如果您不使用通配符,我认为=会提供更多信息。如果users_id确实是一个数字,则只需使用= 243而不是LIKE
  • WHEREFROM子句之后。 JOINFROM子句中的运算符
  • JOIN不是必需的。除非您要从users表中获取列(或者需要使用它来进行高度可疑的过滤),否则请不要理会它。