2015-07-23 2 views
0

Мне нужно вернуть java objects из моей базы данных по отдельному полю. В моей базе данных У меня есть Страна, Штат, Город. Теперь у меня есть 2 записи, где они имеют одинаковые данные в полях, но я хочу вернуть только отдельные состояния в стране.MySQL Java, получающий объекты по отдельному полю

Чтобы уточнить - у меня есть две записи с одной и той же страной и штатом. Например, я хочу только дважды вернуться к штату вместо Вашингтона. Тем не менее, мне нужен объект, а не возврат строки.

Мой запрос:

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

вы используете спящий режим или JPA? –

+0

Я использую JPA. – Matt

+0

У меня была идея, основанная на вашем старом ответе @Alejandro. Поскольку я использую список строк для заполнения моего раскрывающегося списка, вместо этого я использую набор. Я должен буду его протестировать. Спасибо за тк в правильном направлении (надеюсь) – Matt

ответ

0

Я бы не знал JPA, если он упал на мою голову. Так что я шарить после этого:

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

Edit:

Хорошо ясно, что было неправильно для объекта:>

как о

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 
+0

Моя проблема в том, что мне нужно вернуть объект и вернуть строку? Хотелось бы, чтобы все было так просто! – Matt

+0

какой ваш 'show create table Roster' ... можете ли вы сделать это в своем вопросе с помощью кнопки« Редактировать » – Drew

+0

Готово, посмотрите! – Matt

Смежные вопросы