我需要通过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之前的所有内容都很常见。其余的将是独一无二的。我正在想把桌子分成两部分。但这将涉及相当大的重写。
答案 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