我现在有两张table,它们形成了一对多的关系。一个餐厅的table,它Map到多个检查。我的postgres表定义如下:
CREATE TABLE restaurant (
id UUID NOT NULL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
zip VARCHAR(255),
address VARCHAR(255),
phone VARCHAR(255)
);
CREATE TABLE inspection (
restaurant_id UUID NOT NULL,
date VARCHAR(255) NOT NULL,
score int,
violation VARCHAR(255),
risk VARCHAR(255),
FOREIGN KEY (restaurant_id) REFERENCES restaurant(id)
);
当我询问一家餐馆时,我不知道如何推断所有的检查结果。我正在用电脑把餐厅的所有地方都弄到手 resultSet.getString("fieldName")
,但我尝试时它不起作用 resultSet.getString("inspection")
. 我需要什么代码来进行这些检查?这是我目前查询的所有餐厅。
@Override
public Optional<Restaurant> selectRestaurantById(UUID id) {
final String sql = "SELECT * FROM restaurant WHERE id = ?";
List<Restaurant> res = jdbcTemplate.query(
sql,
new Object[] {id},
(resultSet, i) -> {
UUID restaurant_id = UUID.fromString(resultSet.getString("id"));
String name = resultSet.getString("name");
String zip = resultSet.getString("zip");
String address = resultSet.getString("address");
String phone = resultSet.getString("phone");
// How do I get an ArrayList of inspections from postgres??
Restaurant r = new Restaurant(restaurant_id, name, zip, address, phone);
return r;
});
Restaurant found = res.size() > 0 ? res.get(0) : null;
return Optional.ofNullable(found);
}
1条答案
按热度按时间9vw9lbht1#
它与java或jdbc无关。启动一个基本的sql终端(如果你使用postgres,
psql
,在终端上,这样做很好)并首先学习sql。幸运的是,网上有很多教程:)查询只生成另一个表,然后循环遍历。
SELECT * FROM foo
只是。。把那张table给你。还有那张table,小心。餐厅的table就在那里。餐厅。里面没有可供检查的地方。FOREIGN KEY
不是魔术,sql也没有真正的一对多关系的概念。至少,不是这样定义的——它们有连接的概念,可以让你在你想要的任何东西之间临时定义这样的关系。不需要一个FOREIGN KEY
在定义中。所有这些
FOREIGN KEY
是的,就是对db说:你能为这个字段建立一个索引吗?如果有任何事务会将一行“restaurant\u id”字段的值与restaurant表中某行的“id”值不匹配,请将其写入这个表中,那么请失败。这和CHECK v > 0
会的。只是在提交时运行的检查。这就是全部。SELECT r.*, i.* FROM restaurant r LEFT JOIN inspection i ON i.restaurant_id = r.id WHERE r.id = ?
可以说,这就是一张新的“table”。包含行中的每一列和检查中的每一列。如果一家餐厅有0次检查,你会得到1排,每排i.
相关字段为空(因为左连接;如果你写了“内部连接”,你就不会有那些餐馆了)。对于一家有10次检查的餐厅,你会得到10排r.
相关字段重复。如果这听起来很烦人-是的,我看得出来。然后运行第二个查询:
SELECT * FROM inspection WHERE restaurant_id = ?
,获取数据,填写数组列表。注意:你的table很奇怪。
score
应该有一个NOT NULL
限制。