【问题标题】:Why is this mathematical JOIN not working on MySQL?为什么这个数学 JOIN 在 MySQL 上不起作用?
【发布时间】:2022-01-20 06:59:33
【问题描述】:

所以,昨天我注意到,当我尝试时,您可以在 SQL 中加入一种“偏移量”

“加入日志2 ON l1.LogNumber = l2.LogNumber -3”

它将例如从第一个表中的 LogNumber 1 连接到第二个表中的 LogNumber 4。这非常有效。我的问题是,当我尝试进行更复杂的“数学连接”时,我似乎不知道如何让它工作。我的问题如下:我现在有一张桌子,上面有一些来自原木的测量数据,比如木头。还有另一个表,其中包含从所述日志中锯出的板的数据。四块板来自同一个原木。我正在尝试进行连接,其中表中的前四个板连接到第一个日志,第二批四个板连接到第二个,等等。第二个表中的 BoardNumber 不是从 1 开始,而是从 230609 开始。所以,我做了一些数学运算,找出了如何计算正确的 log 和 boardnumber,我尝试了以下代码:

"加入板 pg ON ((p1.LogNumber - 0,75) * 4 + 230608) = BoardNumber"

仅此一项就应该只加入每个日志中的第一个板,所以我必须进行更多的加入才能获得其他的。但是,这不起作用,我收到错误 1241“操作数应包含 1 列”。当我稍微更改括号时,它显示“1241:操作数应包含 2 列”。而且我真的不明白这个JOIN有什么问题。

【问题讨论】:

  • 明显错误 - 逗号而不是点作为小数分隔符。如需更详细的诊断,您必须提供完整的查询文本。
  • 加入条件可以是产生标量结果的任何复杂程度的表达式。甚至是子查询 - dbfiddle.uk/…

标签: mysql sql math join


【解决方案1】:

如果0,75 是指四分之三,则需要改为0.75;见§9.1.2 "Numeric Literals" in the MySQL 8.0 Reference Manual

但是,我实际上建议坚持使用整数并改写 ((p1.LogNumber * 4 - 3) + 230608),以避免舍入错误等风险。

【讨论】:

  • 我明白了!非常感谢,我有点傻。在我的国家/语言中,我们总是使用逗号作为小数分隔符,所以对我来说它看起来很正常,但我应该知道。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2011-05-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多