首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql 3路连接错误

Mysql 3路连接错误
EN

Stack Overflow用户
提问于 2015-04-10 18:56:49
回答 3查看 56关注 0票数 1

我正试图在标记、消息和投票之间创建一个3种方式的连接。我试图在这个特定的查询上建模the other posts,但它似乎不起作用:

误差

代码语言:javascript
复制
[Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LEFT JOIN votes ON votes.messageId = messages.id ORDER BY timestamp DESC' at line 1]

这里是我的查询:

代码语言:javascript
复制
 var query = ([
    'SELECT * FROM marks',
    'LEFT JOIN messages',
    'ON marks.messageId = messages.id',
    'WHERE marks.x between ? AND ?',
    'AND marks.y between ? AND ?',
    'LEFT JOIN votes',
    'ON votes.messageId = messages.id',
    'ORDER BY timestamp DESC'
]).join(' ');

模式

代码语言:javascript
复制
CREATE TABLE marks (
  id int(5) AUTO_INCREMENT,
  PRIMARY KEY (id),
  x float(10, 6),
  y float(10, 6),
  z float(10, 6),
  timestamp timestamp DEFAULT CURRENT_TIMESTAMP,
  messageId int(5),
  FOREIGN KEY (messageId) REFERENCES messages(id),
  userToken VARCHAR(255),
  FOREIGN KEY (userToken) REFERENCES users(token)
);

CREATE TABLE messages (
  id int(5) AUTO_INCREMENT,
  PRIMARY KEY (id),
  messageString text,
  score int(5) DEFAULT 0
);

CREATE TABLE votes (
  id int(5) AUTO_INCREMENT,
  PRIMARY KEY(id),
  userToken VARCHAR(255),
  FOREIGN KEY (userToken) REFERENCES users(token),
  messageId int(5),
  FOREIGN KEY (messageId) REFERENCES messages(id)
);
EN

回答 3

Stack Overflow用户

发布于 2015-04-10 19:00:15

试试这个:

代码语言:javascript
复制
var query = ([
    'SELECT * FROM marks',
    'LEFT JOIN messages',
    'ON marks.messageId = messages.id',
    'LEFT JOIN votes',
    'ON votes.messageId = messages.id',
    'WHERE marks.x between ? AND ?',
    'AND marks.y between ? AND ?',
    'ORDER BY timestamp DESC'
]).join(' ');

WHERE子句必须在JOINS之后。

票数 2
EN

Stack Overflow用户

发布于 2015-04-10 19:02:04

您需要将join语句放在where筛选器之前,如下所示:

代码语言:javascript
复制
var query = ([
   'SELECT * FROM marks',
   'LEFT JOIN messages',
     'ON marks.messageId = messages.id',
   'LEFT JOIN votes',
     'ON votes.messageId = messages.id',
   'WHERE marks.x between ? AND ?',
   'AND marks.y between ? AND ?',
   'ORDER BY timestamp DESC'
]).join(' ');
票数 1
EN

Stack Overflow用户

发布于 2015-04-10 19:08:40

联接子句必须组合在一起,WHERE子句必须在两者之后。

这应该适用于你:

代码语言:javascript
复制
var query = ([
  'SELECT * FROM marks',
  'LEFT JOIN messages',
  'ON marks.messageId = messages.id',
  'LEFT JOIN votes',
  'ON votes.messageId = messages.id',
  'WHERE marks.x between ? AND ?',
  'AND marks.y between ? AND ?',
  'ORDER BY timestamp DESC'
]).join(' ');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29568794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档