【问题标题】:What is the mistake in this SQL query?此 SQL 查询中的错误是什么?
【发布时间】:2020-01-30 09:37:02
【问题描述】:
SELECT * FROM `continue_paper`JOIN `questions`
WHERE `questions`.q_id IN
`continue_paper`.cp_qu_id AND `continue_paper`.cp_id=1

【问题讨论】:

  • 您收到的错误信息是什么?
  • 错误出在表的设计上。请参阅规范化。此外,(并且可以说是相关的)任何时候你发现自己有枚举列,警钟应该开始响起 - 另一个线索表明你的设计不是最理想的。
  • SELECT * FROM continue_paperJOIN questions ON continue_paper.cp_id=1 AND FIND_IN_SET(questions.q_id , continue_paper.cp_qu_id)

标签: mysql sql database laravel


【解决方案1】:

在您的代码中,您需要一组 IN 子句的值,而您不需要,因此您应该使用 =

SELECT * 
FROM continue_paper 
JOIN questions ON questions.q_id =continue_paper.cp_qu_id 
    AND continue_paper.cp_id=1

你可以使用 ON 子句代替 where

【讨论】:

  • 您可以在没有ON 子句的情况下使用JOIN
  • 我已经通过了您在 mysql 中的查询,但它给了我以下错误 #1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的“questions.q_id =continue_paper.cp_qu_id AND continue_paper.cp_id=1 LIMIT 0”附近使用正确的语法,请注意 continue_papaer.cp_qu_id 有多个值,我附上了图片我的数据库请检查可能有帮助
  • 告诉我你真正使用的确切代码..(在我的查询中没有限制)
  • 我得到了答案,我已经提到了感谢支持
【解决方案2】:

JOIN 与比较运算符一起使用通常是一种很好的做法。

我会使用外键/主键加入表,然后在需要时使用IN 对其进行过滤。

具体来说,我会这样处理:

SELECT * FROM `continue_paper` JOIN `questions`
WHERE `questions`.q_id =
`continue_paper`.cp_qu_id AND `continue_paper`.cp_id=1

【讨论】:

  • 如果我的 cp_qu_id 列上只有一个数据,但我的 cp_qu_id 列中有多个字符串,这是正确的,所以这对我不起作用。我希望它对其他人有用
  • 您能分享示例cp_qu_id 内容吗?是逗号分隔吗?总而言之,这不是一个好的设计选择。曾经 SQL 中的 IN 不像 Python 中的 in 那样工作。我还在考虑q_id1cp_qu_id15,35 的情况,由于开头的1 将是误报。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 2014-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-07
  • 1970-01-01
相关资源
最近更新 更多