SQL 连接返回 null
Posted
技术标签:
【中文标题】SQL 连接返回 null【英文标题】:SQL Join Returns null 【发布时间】:2013-08-26 13:07:22 【问题描述】:我正在尝试从数据库中返回一些值
我有什么
用户
user_id (pk)
OWN_EVENTS
user_id (fk)
event_id(pk)
与会者
user_id (fk)
event_id(fk)
我需要返回什么
我需要返回 ATTENDEES
中的所有行,即 event_id 等于某个值,状态不等于 3 并且,OWN_EVENTS
表中该事件的 event_name 值和 USERS
表中的电子邮件值
我已经尝试过什么 我一直在尝试各种组合,但无法弄清楚我做错了什么 http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins
即使这样也返回 null:
SELECT A1.event_name,A1.start_date
FROM ATTENDEES A1
INNER JOIN OWN_EVENTS A2 ON A2.event_id = A1.event_id
WHERE A1.event_id = $event_id
或
SELECT A1.event_name,A1.start_date ,A3.email
FROM ATTENDEES A1
INNER JOIN OWN_EVENTS A2 ON A2.event_id = A1.event_id
INNER JOIN USERS A3 ON A3.user_id = A1.user_id
WHERE A1.event_id = $event_id AND A1.status != 3
我需要进行什么查询调用?
编辑:::::: 样本数据:
参加者
OwnEvents
用户
【问题讨论】:
你有更多的样本数据吗?ATTENDEES
表只有一行,但其他表没有。因此,INNER JOIN
s 将始终不返回任何行。
@MichaelBerkowski 添加了一些示例数据屏幕截图
【参考方案1】:
问题是连接到用户表。您从ATTENDEES
加入。但是,我认为您需要所有者的电子邮件。
这会将连接切换到left outer join
。这将返回 ATTENDEES
表中的所有匹配行,即使其他表中没有匹配项:
SELECT oe.event_name, a.start_date, u.email
FROM ATTENDEES a left outer join
OWN_EVENTS oe
ON oe.event_id = a.event_id left outer join
USERS u
on a.user_id = u.user_id
WHERE a.event_id = $event_id AND a.status <> 3
【讨论】:
在 phpmyadmin 中,当我为 event_id 查询事件 id '148' 时,我得到了#1054 - Unknown column 'a.event_name' in 'field list'
@MordFustang 。 . .这是固定的,但这是您的示例查询中的一个问题。您从ATTENDEES
表而不是OWN_EVENTS
中获取事件名称,它应该来自哪里。为别名使用表缩写确实有助于防止此类错误。
是的,我已将查询更改为 oe.event_name, oe.start_date, u.email
,并且 mysql 返回了一个空结果集。你能不能快点看一下我的示例数据,我已经从数据库中添加了一些屏幕截图
@MordFustang 。 . .您可能在不同的列上存在类型冲突。我建议您使用表定义和示例数据在 SQL Fiddle (www.slqfiddle.com) 中设置示例。
实际上oe.event_name, oe.start_date, u.email
正在工作我一直在复制粘贴磨损的事件ID以上是关于SQL 连接返回 null的主要内容,如果未能解决你的问题,请参考以下文章