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 JOINs 将始终不返回任何行。 @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的主要内容,如果未能解决你的问题,请参考以下文章

Jmeter 如何断言数据库返回的字段为NULL

SQL Server:如果左连接没有结果,则返回占位符/文本[重复]

MyBatis查询mysql数据返回null

sql语言中的concat函数和nvl函数二者有啥区别?

使用 SQL 搜索精确值

sql语句返回null时报错的解决方案