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子句时,只有紧跟在该子句前面的表参与联接,而不是所有的表。或者,换句话说,在逗号连接和连接子句这两种运算符之间,后者优先于前者。谢谢。工作。我可能需要学习更多关于连接的知识;-)