由于外键为空值,无法从表中获取数据
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
是一个内部联接(如果您不使用特定联接,这是默认值)。内连接迭代 LayerDetails
和 RecipeUser
的元组。但是,由于在您的情况下字段 recipeUser
是 null
,因此它没有 LayerDetails
的该实例的元组。因此,要同时查找没有recipeUser
的LayerDetails
实例,您需要改用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 示例。
【讨论】:
以上是关于由于外键为空值,无法从表中获取数据的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 CodeIgniter 3 中的外键从表中获取列数据