【问题标题】:MySQL syntax error [Left Join]MySQL 语法错误 [左连接]
【发布时间】:2017-08-14 08:47:07
【问题描述】:

所以我在下面得到了这个查询,它给了我一个语法错误。我将在查询下方显示错误。

请检查以下内容:

SELECT g.fullname, g.id as guardian_id, g.email, g.email_2, s.title, s.domain, d.device_id as device, d.os, gf.booking_open_notified, gf.days_notified_7, gf.days_notified_3, gf.day_notified, s.id as school_id, p.firstname, p.surname 
FROM guardian as g
LEFT JOIN guardian_form as gf ON gf.school_id = g.school_id
LEFT JOIN school as s ON s.id = g.school_id 
LEFT JOIN school_design as sd ON sd.school_id = s.id 
LEFT JOIN device as d ON d.school_id = s.id AND d.guardian_id = g.id 
    (
        LEFT JOIN pupil as p ON p.school_id = s.id AND 
        (
            p.grade_id = gf.grade_id
            OR p.grade_id = gf.grade_id_2
            OR p.grade_id = gf.grade_id_3
            OR p.grade_id = gf.grade_id_4
            OR p.grade_id = gf.grade_id_5
            OR p.grade_id = gf.grade_id_6
            OR p.grade_id = gf.grade_id_7
            OR p.grade_id = gf.grade_id_8
            OR p.grade_id = gf.grade_id_9
            OR p.grade_id = gf.grade_id_10
        )
    ) OR (
        LEFT JOIN guardian_form_group as gfg ON gfg.guardian_form_id = gf.id
        LEFT JOIN pupil_group as pg ON pg.group_id = gfg.group_id
        LEFT JOIN pupil as p ON p.id = pg.pupil_id AND pg.school_id = s.id
    )
WHERE (
    gf.booking_open_notified != 1 
    OR gf.days_notified_7 != 1 
    OR gf.days_notified_3 != 1 
    OR gf.day_notified != 1 
)
AND gf.active = 1
AND sd.disable_parents_evening_notification_and_email = 0 
GROUP BY gf.id, p.id 
LIMIT 20

错误:

错误 SQL 查询:文档

SELECT g.fullname, g.id as guardian_id, g.email, g.email_2, s.title,
s.domain, d.device_id as device, d.os, gf.booking_open_notified,
gf.days_notified_7, gf.days_notified_3, gf.day_notified, s.id as
school_id, p.firstname, p.surname  FROM guardian as g LEFT JOIN
guardian_form as gf ON gf.school_id = g.school_id LEFT JOIN school as
s ON s.id = g.school_id  LEFT JOIN school_design as sd ON sd.school_id
= s.id  LEFT JOIN device as d ON d.school_id = s.id AND d.guardian_id = g.id      
(
  LEFT JOIN pupil as p ON p.school_id = s.id AND 
  (
        p.grade_id = gf.grade_id
        OR p.grade_id = gf.grade_id_2
        OR p.grade_id = gf.grade_id_3
        OR p.grade_id = gf.grade_id_4
        OR p.grade_id = gf.grade_id_5
        OR p.grade_id = gf.grade_id_6
        OR p.grade_id = gf.grade_id_7
        OR p.grade_id = gf.grade_id_8
        OR p.grade_id = gf.grade_id_9
        OR p.grade_id = gf.grade_id_10
  )
) OR 

MySQL 说:文档

1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法使用 近

'JOIN pupil as p ON p.school_id = s.id AND 
    (
        p.grade_id = gf.' at line 8

【问题讨论】:

  • 顺便提一下,LEFT JOIN x WHERE x =...INNER JOIN x 是一样的
  • 并且任何时候你发现自己使用了枚举列名(例如,2),你可以确定你的架构设计出现了非常非常错误的地方。
  • 我觉得这是您在LEFT 之前打开的(,并且整个结构与JOIN... OR 甚至可能吗?

标签: mysql join left-join


【解决方案1】:

你的语法是这样的

SELECT listOfColumns FROM table1 LEFT JOIN table2 (LEFT JOIN table3) OR (LEFT JOIN table4)

您为什么要尝试使用“或”来加入?这是不支持的。如果您想过滤掉表格,请尝试改善您的 ON 条件

【讨论】:

  • 我正在尝试获取链接到 Guardian_form 的监护人/学生,这些监护人或学生链接到 Grade_id 或组
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 2015-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多