Запрос к базе данных и язык программирования для проверки наличия данных - PullRequest
1 голос
/ 16 сентября 2011

У меня есть база данных с именами и фамилиями.Я выбираю некоторые из них, а не все.Я хочу показать фамилию с одним исключением, когда фамилия одинакова для двух человек в текущем выборе, перед инициалом имени, а затем пробел.(G.)

Приложение работает на мобильном устройстве, поэтому я обеспокоен тем, что циклический просмотр данных и сравнение каждого имени со всеми другими именами (для внутри для) слишком затратно.

Можно ли проверить это в запросе и сделать оператор case, в котором я объединяю substr имени с .?

Как мне это сделать?

Спасибовы.

Ответы [ 2 ]

2 голосов
/ 16 сентября 2011

Следующие запросы SQL показывают, как этого добиться.

select firstname, lastname from employee;
 firstname | lastname 
-----------+----------
 Fred      | Bloggs
 Joe       | Citizen
 Bill      | Citizen
 Andrew    | Smith


select case when (select count(*) from employee E where E.Lastname=E2.Lastname) > 1 then substr(firstname, 1, 1) || '. ' else '' end || lastname from employee E2;
  ?column?  
------------
 Bloggs
 J. Citizen
 B. Citizen
 Smith

Было бы полезно иметь индекс для столбца фамилии, чтобы подзапрос был более эффективным.

1 голос
/ 16 сентября 2011

Я думаю, вы найдете это менее эффективным и, возможно, более трудным для выполнения в SQL, который не предоставляет никаких инструментов для изучения соседних строк: вам нужно выполнить подзапрос или объединение для каждой строки, чтобы посмотрите, есть ли какая-нибудь другая строка с той же фамилией.

Пока вы обрабатываете только страницу результатов за раз (что вы сказали) и сортируете по фамилии, вы можете справиться с этим, сохранив одну строку и «заглядывая вперед» на следующую строку для дубликат фамилии. Это не должно требовать много памяти в клиенте. Однако вам, вероятно, следует запросить еще один результат, чем вы хотите отобразить, чтобы быть уверенным, что первый результат на следующей странице не будет иметь такую ​​же фамилию, как последний на этой странице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...