Mysql 简单SQL连接的问题

Mysql 简单SQL连接的问题,mysql,sql,join,Mysql,Sql,Join,这涉及一个网页,该网页应显示所有即将发生的事件,并标记当前用户日记中的任何事件 日记表 日记\u id 成员id 事件id 事件表 事件id 地区id 地区表 地区id 成员表 成员id … 查询: SELECT event.*, region.name, diary.diary_id FROM event, region LEFT JOIN diary on diary.member_id = 10 AND diary.event_id = event.event_id WHERE r

这涉及一个网页,该网页应显示所有即将发生的事件,并标记当前用户日记中的任何事件

日记表
日记\u id
成员id
事件id

事件表
事件id
地区id

地区表
地区id

成员表
成员id

查询:

SELECT event.*, region.name, diary.diary_id 
FROM event, region 
LEFT JOIN diary on diary.member_id = 10 AND diary.event_id = event.event_id
WHERE region.region_id = event.region_id AND `date` >= NOW()

这将返回未知列event.event\u id,我无法找出原因。我不是SQL高手,但我希望这会起作用,并在日记id列中为所有不在用户日记中的事件提供空值

您正在混合
join
语法。试试这个

SELECT event.*,
       region.name,
       diary.diary_id
FROM   event
       INNER JOIN region
         ON region.region_id = event.region_id
       LEFT JOIN diary
         ON diary.member_id = 10
            AND diary.event_id = event.event_id
WHERE  `date` >= NOW()  
更新


您找不到
事件\u id
的问题是因为来自事件、区域的
。在
on
子句中找不到
event\u id
。按照上面的建议更改查询,但也可以通过将表的位置从region,event切换到
,来修复查询。不要那样做。使用大约20年前引入SQL语言的新联接语法

首先,我不会将
diary.member_id=10
放入连接中:

SELECT event.*, region.name, diary.diary_id 
FROM `event`, region 
LEFT JOIN diary ON diary.event_id = event.event_id
WHERE region.region_id = event.region_id AND `date` >= NOW() AND diary.member_id = 10

是否确定
event.event\u id
不是
event.id

如果要执行左联接,请不要将diary.member\u id=10放在where子句中。在PL/SQL中,这将在不询问您的情况下将您的左连接转换为连接

以下方面应该做得更好:

SELECT event.*, region.name, diary.diary_id 
FROM event
JOIN region on region.region_id = event.region_id  
LEFT JOIN ( select diary_id, event_id
              from diary 
             where diary.member_id = 10 ) diary
       ON diary.event_id = event.event_id
WHERE `date` >= NOW()

您是否可以编辑帖子以包含实际完整的错误消息(格式为代码)?您确定事件ID列的名称为
event\u ID
?如果启动MySQL客户端并键入
descripe事件,您会看到什么?如果将
diary.member_id=10
移动到where子句,则不再针对
diary
执行
左外部联接。结果将不一样。+1。基本上,当逗号分隔的表列表后面跟一个JOIN子句时,只有紧跟在该子句前面的表参与联接,而不是所有的表。或者,换句话说,在逗号连接和连接子句这两种运算符之间,后者优先于前者。谢谢。工作。我可能需要学习更多关于连接的知识;-)