java - 具有条目关系的 MySQL JOIN

标签 java mysql

我有一个 MySQL 表如下:

CREATE TABLE `objects` (
  `id` INT NOT NULL,
  `foo` VARCHAR ( 32 ) NOT NULL,
  `bar` VARCHAR ( 32 ) NOT NULL,
  PRIMARY KEY ( `id` )
);

多个对象之间可以有一定的关系,如下表所示:

CREATE TABLE `relations` (
  `id1` INT NOT NULL,
  `id2` INT NOT NULL,
  PRIMARY KEY ( `id1`, `id2` )
  FOREIGN KEY ( `id1`, `id2` ) REFERENCES `objects` ( `id` ) ON DELETE CASCADE
);

如果两个对象彼此有某种关系,一个条目被放入relationsid1作为第一个对象的 ID 和 id2作为第二个对象的 id。现在我想加载对象及其与其他对象的关系,并将它们存储在如下所示的 Java 对象中:

public class Obj {

  private final Set<Obj> relations = new HashSet<>();

  // ...

}

我正在寻找一种方法来正确加载与 JOIN 的关系,它选择了 id2。来自具有匹配 id 的所有行/id1id1来自具有匹配 id 的所有行/id2 .

我可以使用以下查询:

SELECT `objects`.*, GROUP_CONCAT(`relations`.`id1`) AS `id1`
FROM `objects`
LEFT JOIN `relations`
ON `objects`.`id` = `relations`.`id2`
GROUP BY `objects`.`id`;

但是,这只会选择给我 id1用于任何 relationsid2 排在一起匹配id , 但它不会给我 id2用于 relations带有 id1 的行匹配id .

是否有可能以某种方式同时选择它们?

示例:我在表格中输入了以下数据:

INSERT INTO `objects` ( `foo`, `bar` ) VALUES ( 'hi', 'this' );
INSERT INTO `objects` ( `foo`, `bar` ) VALUES ( 'is', 'an' );
INSERT INTO `objects` ( `foo`, `bar` ) VALUES ( 'example', 'row' );
INSERT INTO `relations` VALUES ( 1, 2 );
INSERT INTO `relations` VALUES ( 3, 1 );

当我现在从 objects 中选择行时其中 id是 1,我想要带有 idone 行, foo , bar , 和一个关系列表(应该是 2 3)

最佳答案

如果我没理解错的话,您想要选择所有相关对象。这可以按如下方式完成:

SELECT id1, o1.foo foo1, o1.bar bar1, id2, o2.foo foo2, o2.bar bar2
FROM `relations` r
JOIN `objects` o1 ON o1.id = r.id1
JOIN `objects` o2 ON o2.id = r.id2

关于java - 具有条目关系的 MySQL JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58995253/

相关文章:

mysql - 尝试创建 sql 表但显示错误

mysql - 我的 node.js 服务器挂起 - 直到我发出 Ctrl+C

mysql - 存储过程如果条件不起作用MYSQL

java - 为什么原型(prototype)作用域与 Stateful bean 一起使用?

java - 使用 SecurityContext 的 REST Web 服务的身份验证方法

php - 今天的日期是否与数据库 PHP/MYSQL 中的现有范围相交

mysql - 跨平台 SQL DB API c/c++

java - java.lang.NoSuchMethodException 错误(布局)

java - Twitter4j v2.2.6 具有地理定位功能的流媒体 API

java - 斐波那契数列,用 Java 写一行?