【问题标题】:Incorrect syntax near the keyword 'right'关键字“right”附近的语法不正确
【发布时间】:2019-11-06 20:17:33
【问题描述】:

我对 SQL 很陌生,花了几个小时搜索,但所有文章都指向或多或少相同

SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;  

下面是我的代码,但老实说,我不确定我在这里做错了什么。

  "SELECT * FROM user_private_store WHERE store_type=@STORE_TYPE " +
     "RIGHT JOIN user_private_store_items " +
     "ON user_private_store.id = user_private_store_items.id";

我想通过 ID 加入两个表,保留左侧的 id 并从右侧表 user_private_store_items 获取其他参数

我在关键字“right”附近得到不正确的语法

【问题讨论】:

  • 提示:JOINFROM 子句中的运算符WHEREFROM 子句之后的子句。
  • 今日提示:改用LEFT JOIN。更容易理解。
  • 订单必须是SELECT ... FROM ..... (JOINS) ..... WHERE ..... 你有WHERE 之前 JOIN - 这行不通

标签: sql join where-clause


【解决方案1】:

只需将where 子句放在连接之后:

"SELECT * FROM user_private_store s " +
"RIGHT JOIN user_private_store_items i " +
"ON s.id = i.id " +
"WHERE store_type=@STORE_TYPE"

注意事项:

  • 表别名使查询更易于阅读和理解。我修改了您的查询以使用它们

  • 您需要在 where 子句中为其所属的表添加前缀 store_type,以避免歧义

  • 喜欢select *;更好地枚举您要选择的所有列

【讨论】:

  • 非常感谢初学者提示别名实际上看起来很棒,参考代码“where”只属于 user_private_store,所以我开始在 story_type 上收到错误 Invalid column name 'store_type
  • 当然可以,但是我在“无效的列名'store_type”上面评论的错误呢
  • 而且由于您将这些字符串连接到一个 SQL 语句中,因此您应该在每一行的末尾至少使用一个空格!否则,当您的语句看起来像 ` ..... _store sRIGHT JOIN ..... iON .....` 等等时,您会遇到有趣的错误
  • 我在 WHERE s.store_type 处处理的问题
猜你喜欢
  • 2016-06-08
  • 2013-12-16
  • 2017-11-22
  • 2018-06-16
  • 2013-10-29
  • 2014-06-22
  • 1970-01-01
  • 2013-05-04
  • 2013-05-21
相关资源
最近更新 更多