由于外键为空值,无法从表中获取数据

Posted

技术标签:

【中文标题】由于外键为空值,无法从表中获取数据【英文标题】:Not getting data from a table because of null value of foreign key 【发布时间】:2019-05-17 12:59:43 【问题描述】:

我正在使用 mysql 数据表和 SQL 查询来获取数据,我从通过一对多和多对一关系连接的两个表中进行选择,但是如果映射表没有任何值,那么我什至没有得到我选择的表的值。但是当我输入外键时,它工作正常,我是两个表的数据。

@Query("SELECT LD,REC FROM LayerDetails LD JOIN LD.recipeUser REC")
public List getLayerDetails();

这是我的 SQL 查询,当 recipeUser 为空时,尽管有 Layerdetails 的值,但我没有得到任何值。

【问题讨论】:

【参考方案1】:

我遇到了同样的问题。我通过LEFT JOIN 解决了它,而不是简单的JOIN

[INNER] JOIN - 仅返回在两个表中都匹配的记录 FULL JOIN - 返回两个表中的记录。如果没有匹配,缺失的一侧将包含 null。 LEFT JOIN - 返回左表中的所有记录,以及右表中的匹配记录(如果可用)。 RIGHT JOIN - 返回右表中的所有记录,以及左表中的匹配记录(如果可用)。

您可以查看Visual Representation of SQL Joins了解更多详情。

【讨论】:

感谢 Eugen,使用 LEFT JOIN 后完美运行。【参考方案2】:

发生这种情况是因为这里的JOIN 是一个内部联接(如果您不使用特定联接,这是默认值)。内连接迭代 LayerDetailsRecipeUser 的元组。但是,由于在您的情况下字段 recipeUsernull,因此它没有 LayerDetails 的该实例的元组。因此,要同时查找没有recipeUserLayerDetails 实例,您需要改用LEFT JOIN

@Query("SELECT LD,REC FROM LayerDetails LD LEFT JOIN LD.recipeUser REC")
public List getLayerDetails();

如果您想了解有关 JPA 中不同 JOIN 可能性的更多信息,您可以查看 https://www.objectdb.com/java/jpa/query/jpql/from 示例。

【讨论】:

以上是关于由于外键为空值,无法从表中获取数据的主要内容,如果未能解决你的问题,请参考以下文章

MySQL:PHP:由于警告,无法从表中获取数据

SQL - 仅从表中获取并非所有值都是空值的列

如何使用 CodeIgniter 3 中的外键从表中获取列数据

mybatis 先插入主表数据,获得自增主键。然后作为从表的外键插入从表数据怎么做

获取请求导致父管理对象的外键为空

从天蓝色表中读取行时为空值