哪个查询最好通过id字段从两个表中获取数据?在一个查询或多个select语句中使用一个连接?
我想获得运行时最佳解决方案。
例如:
我有“任务”表,其中包含外键字段, 喜欢:statustask(来自statustasks表),taskurgency(来自任务表) whate是从DB获取“任务”列表对象的最佳方式:
加入:
String sql = "SELECT * FROM tasks "
+ "INNER JOIN statustask_in_language ON tasks.status=statustask_in_language.statustask_id "
+ "INNER JOIN statustasks ON tasks.status=statustasks.id "
+ "INNER JOIN taskurgency_in_language ON tasks.urgency=taskurgency_in_language.taskurgency_id "
+ "INNER JOIN taskurgency ON tasks.urgency=taskurgency.id ";
List<task> listUsers = jdbcTemplate.query(sql, new RowMapper<task>() {
@Override
public task mapRow(ResultSet rs, int rowNum) throws SQLException {
task t = new task();
tabelsTemplate status=new tabelsTemplate();
tabelsTemplate urgency=new tabelsTemplate();
t.setId(rs.getString("id"));
t.setDate(rs.getTimestamp("date"));
t.setTargetDate(rs.getTimestamp("targetDate"));
t.setSubject(rs.getString("subject"));
t.setDescription(rs.getString("description"));
t.setAdminId(rs.getString("adminId"));
t.setOpenedBy(rs.getString("openedBy"));
status.setId(rs.getString("status"));
status.setInCurrentLanguage(rs.getString("statustask_in_language.description"));
status.setDescription(rs.getString("desc"));
t.setStatusObj(status);
urgency.setId(rs.getString("urgency"));
urgency.setInCurrentLanguage(rs.getString("taskurgency_in_language.description"));
urgency.setDescription(rs.getString("descUrgency"));
t.setUrgencyObj(urgency);
return t;
或使用一个连接并为每个外键选择语句来设置对象。 注意:在Task对象中,外键是对象(而不是ID)。
答案 0 :(得分:1)
这是一个非常普遍的问题,如果没有正确的信息,就无法正确回答。
每件事取决于你想要的信息,以及你想用它做什么。
如果您需要从多个表中获取数据,JOINS
是可行的方法,因为这是将数据相互连接而不需要执行某些不必要的逻辑的最简单方法。
在大多数情况下 - JOIN
将是正确的方法,但是有时候,例如,将数据与PHP
对齐的逻辑将很难,并且单独的查询可能更容易使用。