【问题标题】: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 的值,但我没有得到任何值。

【问题讨论】:

    标签: java mysql sql spring-boot


    【解决方案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 示例。

    【讨论】:

      猜你喜欢
      • 2015-10-14
      • 2019-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多