Выбор SQL для Android AlterDialog с отображением значений кода / ключа - PullRequest
0 голосов
/ 10 августа 2011

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

Я работаю над мультиселектом Android AlertDialog. Диалог будет использоваться для выбора значений из таблиц ключей / кодов. Чтобы заставить это работать, мне нужен запрос, который возвращает набор результатов, который имеет все идентификаторы и значения ключа / кода и другой столбец с логическим значением (или +1 и -1), указывающим, имеет ли данный человек этот заголовок. Вот набор результатов, который мне нужен (с использованием SQLite 3):

Данный person.id = 1

TITLE.ID    TITLE.TITLE    PERSON_HAS_TITLE  
1           Parent         true OR +1
2           Teacher        true OR +1
3           Fireman        false OR -1
4           Policeman      false OR -1   


**PERSON**  
ID    NAME  
1     Sue  
2     Scott  
3     Jim  

**TITLE**   
ID    TITLE  
1     Parent  
2     Teacher  
3     Fireman  
4     Policeman

**PERSON_TITLE**  
PERSON_ID   TITLE_ID  
1           1  
1           2  
2           4 

Есть идеи?

1 Ответ

1 голос
/ 10 августа 2011

Это будет сделано:

SELECT title.id,
       title.title,
       ( CASE
           WHEN EXISTS(SELECT person_id
                       FROM   person_title
                       WHERE  person_id = 1
                       AND    title_id = title.id) THEN 1
           ELSE -1
         END ) as person_has_title
FROM   title  

В качестве альтернативы, это также будет работать:

SELECT title.id,
       MAX(title.title) as title,
       MAX(CASE
             WHEN person_id IS NULL THEN -1
             ELSE 1
           END) as person_has_title
FROM   title
       LEFT JOIN person_title
         ON ( title.id = person_title.title_id and person_title.person_id = 1)
GROUP  BY title.id  
...