【问题标题】:Syntax Error when Inner Joining two tables内部连接两个表时出现语法错误
【发布时间】:2012-03-15 17:00:49
【问题描述】:

我正在尝试加入表 eventsvenues,但是在内部加入时遇到了问题。我就是这样做的:

$query =    "SELECT e.*, v.* FROM events e WHERE start_datetime >= '$DATE_START_SELECTED' AND end_datetime < '$DATE_END_SELECTED'".
           "INNER JOIN venues v ON e.VENUE_LOCATION = v.VENUE_ID";

由于某种原因,我遇到了这样的错误:

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 在第 1 行的“INNER JOIN 场地 v ON e.VENUE_LOCATION = v.VENUE_ID”附近

知道为什么吗?谢谢!


编辑:

我将代码更新为如下所示:

$query =    "SELECT e.*, v.* FROM events e ".
        "INNER JOIN venues v ON e.VENUE_LOCATION = v.VENUE_ID".
        "WHERE start_datetime >= '$DATE_START_SELECTED' AND end_datetime < '$DATE_END_SELECTED'";

只得到这个错误:

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 'start_datetime > = '2012-03-15 06:00:00' AND end_datetime

【问题讨论】:

  • 回复:您的更新 - 在 v.VENUE_ID" 之后和 WHERE 之前放置一个空格

标签: mysql


【解决方案1】:

您的INNER JOIN 需要位于WHERE 子句之前。

例如,

select e.*, v.*
from events e
inner join venues v on e.VENUE_LOCATION = v.VENUE_ID
where start_datetime >= '$DATE_START_SELECTED' 
    and end_datetime < '$DATE_END_SELECTED'

【讨论】:

  • 啊哈...从现在开始就知道了。谢谢 RedFilter :)!
【解决方案2】:

联接总是在from 之后和where 之前。因此,您的查询将更像以下内容:

SELECT e.*, v.* 
FROM events e 
    INNER JOIN venues v ON e.VENUE_LOCATION = v.VENUE_ID
WHERE start_datetime >= '$DATE_START_SELECTED' 
    AND end_datetime < '$DATE_END_SELECTED'

【讨论】:

    【解决方案3】:

    在最后写下 where 子句(我还将简写符号扩展为“FROM events e to FROM events AS e:

    SELECT e.*, v.* FROM events AS e 
    INNER JOIN venues AS v ON e.VENUE_LOCATION = v.VENUE_ID
    WHERE e.start_datetime >= yourVar AND e.end_datetime < yourOtherVar;
    

    【讨论】:

    • 忘了提到我也将 start_datetime 和 end_datetime 限定为 e.start_datetime 和 e.end_datetime,我认为它们在事件表中。如果您连接具有相同名称字段的表,这可以避免混淆。
    猜你喜欢
    • 1970-01-01
    • 2015-03-03
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多