使用join时sql语法不正确

2uluyalo  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(399)

这个问题在这里已经有了答案

mysql内部连接查询语法错误(1个答案)
两年前关门了。
我的数据库里有两张table。一个用于用户登录信息,一个用于一般信息。
我正在尝试编写一个查询,从fk“users\u id”与登录用户id相同的行中选择“firstname”列。
在php中执行任何操作之前,我在数据库中运行查询,因此登录的用户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\u users”:

这是我的另一个名为“b6vjp\u user\u info”的表:

错误是:


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

现在我翻译一下,因为我的工作环境是德语。但我相信你知道什么是语法错误。
不管怎样,我一遍又一遍地检查我的查询的连接部分,并查看了w3schools上的连接教程。但没有明显的错误。
有人看到我没看到的吗?

mkshixfv

mkshixfv1#

你必须把 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
baubqpgj

baubqpgj2#

我强烈建议使用表别名。您还需要修改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 . WHERE 去追求 FROM 条款。 JOIN 是中的操作员 FROM 条款。
这个 JOIN 没有必要。除非您正在从users表中获取列(或者需要它来进行过滤,这是非常可疑的),否则不要费心处理它。

e4yzc0pl

e4yzc0pl3#

把钥匙放好 WHERE (最后一个)后面的子句 ON 条款。

相关问题