【问题标题】:MYSQL query SELECT from one table and join results with other tableMYSQL 从一张表中查询 SELECT 并将结果与​​另一张表连接
【发布时间】:2013-08-20 11:05:01
【问题描述】:

我有两张桌子MESSAGESUSERS

MESSAGES:

|id|user_id|message|1st number|2nd number|

USERS:

|user_id|name|

我正在尝试显示一条消息,并通过 user_id 获取消息旁边的用户名。是否可以仅在一个查询中完成?

此时我的演示查询看起来像这样,但它不起作用。

SELECT *
 FROM   messages
 WHERE  1st number BETWEEN $x AND $z
 AND 2nd BETWEEN $x AND $z
 LEFT JOIN users
 ON users.user_id= messages.user_id
 ORDER BY time DESC

我得到的错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 5 行的“LEFT JOIN users ON WHERE users.user_id= messages.user_id ORDER BY time DESC”附近使用正确的语法

【问题讨论】:

  • 您在问题中已经说过了;你可以加入他们。 dev.mysql.com/doc/refman/5.0/en/join.html
  • 您收到什么错误信息?另外,以下是否有效? "SELECT * FROM messages LEFT JOIN users ON users.user_id=messages.user_id" 如果不是,你得到后一个查询的错误信息是什么?
  • '1st number' 这是你的真实字段名..?

标签: mysql sql


【解决方案1】:

您的 SQL 存在一些问题:

  • 如果列名包含空格,则需要用引号引起来
  • 你需要在mysql中写完整的列名
  • JOIN 在 WHERE 之前

类似

SELECT *
FROM messages
 LEFT JOIN users ON users.user_id=messages.user_id
WHERE `1st number` BETWEEN $x AND $z
 AND `2nd number` BETWEEN $x AND $z
ORDER BY time DESC

应该工作

【讨论】:

  • 谢谢,这个成功了。只是一个新手问题。所以当试图从多个表中获取结果时,首先你需要将它们全部加入然后过滤?
  • SQL 选择通过定义一个“查询视图”来工作——一个或多个表、子查询或数据库视图连接在一起,然后对其进行过滤、分组、分组过滤。所以你有SELECT...字段列表...FROM...视图定义与连接和子查询...WHERE...行过滤器...GROUP BY...分组参数.. . HAVING ... 组过滤器 ... ORDER BY 排序参数。当然,其中一些是可选的。
【解决方案2】:

请试试这个。

SELECT
    *
FROM
    messages
    LEFT JOIN users ON users.user_id = messages.user_id
WHERE
        `1st number` BETWEEN $x AND $z
    AND
        `2nd number` BETWEEN $x AND $z
ORDER BY time DESC

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多