MySQL Java通过一个不同的字段获取对象

时间:2015-07-23 21:10:50

标签: mysql java-ee

我需要通过distinct字段从我的数据库中返回 java objects 。在我的数据库中,我有国家城市。现在我有2条记录,它们在字段中有相同的数据,但我只想在一个国家/地区返回不同的状态。

澄清 - 我有两个国家和州的记录。例如,我只想两次返回华盛顿而不是华盛顿。但是,我需要对象而不是返回华盛顿字符串。

我的查询:

SELECT DISTINCT r FROM Roster r where r.state = :state AND r.country = :country

发生的事情是它会返回所有重复项,因为对象不是不同的,我只想要其中一个?

如果我不是很清楚,我道歉。

非常感谢任何帮助!

编辑:我需要这些对象,因为我使用它们来填充结果表。

EDIT2: 我的创建表:

CREATE TABLE `roster` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `country` varchar(45) NOT NULL,
  `state` varchar(45) NOT NULL,
  `city` varchar(45) DEFAULT NULL,
  `clientName` varchar(45) NOT NULL,
  `tDomain` varchar(45) NOT NULL,
  `tSubDomain` varchar(45) DEFAULT NULL,
  `tReferenceId` varchar(45) DEFAULT NULL,
  `startDate` date DEFAULT NULL,
  `endDate` date DEFAULT NULL,
  `startTime` time DEFAULT NULL,
  `endTime` time DEFAULT NULL,
  `designation` varchar(45) DEFAULT NULL,
  `role` varchar(45) DEFAULT NULL,
  `name` varchar(45) NOT NULL,
  `surname` varchar(45) NOT NULL,
  `mobileNumber` varchar(45) DEFAULT NULL,
  `officeNumber` varchar(45) DEFAULT NULL,
  `email` varchar(45) DEFAULT NULL,
  `availability` tinyint(1) NOT NULL,
  `comments` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1

tReferenceID之前的所有内容都很常见。其余的将是独一无二的。我正在想把桌子分成两部分。但这将涉及相当大的重写。

1 个答案:

答案 0 :(得分:0)

我不知道JPA是否落在我头上。所以我在此之后摸索:

SELECT DISTINCT r.Country,r.State,r.City 
FROM Roster r 
where r.state = :state AND r.country = :country

修改

很明显,对象是错误的:>

怎么样

create table roster
(
    id int auto_increment primary key,
    country varchar(100) not null,
    state varchar(100) not null,
    city varchar(100) not null
);

insert roster (country,state,city) values ('usa','kentucky','louisville');
insert roster (country,state,city) values ('usa','illinois','chicago');
insert roster (country,state,city) values ('usa','kentucky','louisville');
insert roster (country,state,city) values ('usa','kentucky','blah_blah');

和我使用的字符串

select * from roster r
join 
(SELECT min(id) as cheatId
FROM roster
where country='usa' and state='kentucky') inr
on inr.cheatId=r.id

+----+---------+----------+------------+---------+
| id | country | state    | city       | cheatId |
+----+---------+----------+------------+---------+
|  1 | usa     | kentucky | louisville |       1 |
+----+---------+----------+------------+---------+
1 row in set (0.00 sec)

对于对象,您使用:

select r from roster r
join 
(SELECT min(id) as cheatId
FROM roster
where country=:country and state=:state) inr
on inr.cheatId=r.id