Попытка получить таблицу из SQL-запроса

Вам просто нужно установить для вашего свойства ListView fadeEdge значение none в вашем XML-файле макета, и вы не получите синюю тень на OVERSCROLL.

android:fadingEdge="none"

EDIT:

это теперь устарело, вы можете использовать android:overScrollMode="never".

0
задан Guillaume Levesque 5 March 2019 в 19:30
поделиться

3 ответа

Подумайте: group by и having. Что еще более важно, подумайте JOIN, JOIN, JOIN. Никогда не используйте запятые в предложении from.

SELECT p.firstName, p.lastName
FROM Professor p JOIN
     Group g
     ON g.professorCode = p.professorCode
WHERE (g.sessionCode, g.sigle) IN ( (32003, 'INF1130'), (32003, 'INF1110'),
                                    (12004, 'INF3180'), (12004, 'INF2110')
                                  )
GROUP BY p.firstName, p.lastName
HAVING COUNT(DISTINCT g.sigl) = 4;  -- has all four
0
ответ дан Gordon Linoff 5 March 2019 в 19:30
поделиться

использовать современное соединение

SELECT Professor.firstName, Professor.lastName
FROM            Professor join "Group" g on
            g.professorCode = Professor.professorCode
               where  g.sessionCode in( 32003,12004 )
                AND g.sigle in( 'INF1130', 'INF1110','INF3180','INF2110')                        
             group by  Professor.firstName, Professor.lastName
             having count( distinct sigle )=4
0
ответ дан Zaynul Abadin Tuhin 5 March 2019 в 19:30
поделиться

Похоже, вы хотите перечислить любого профессора, который или преподавал INF1130 и INF1110 в 32003; или преподавал INF3180 и INF2110 в 12004. К сожалению, вы представили это как И (то есть они должны были преподавать все четыре курса - одну пару курсов И другой), а не ИЛИ (один набор курсов ИЛИ другой) [1111 ]

Как многословный способ расширить то, что, я думаю, вы хотите:

SELECT p.firstName, p.lastName
FROM Professor p
WHERE (
  EXISTS (
    SELECT *
    FROM GroupX g
    WHERE professorCode = p.professorCode
    AND sessionCode = 32003
    AND sigle = 'INF1130'
  )
  AND EXISTS (
    SELECT *
    FROM GroupX g
    WHERE professorCode = p.professorCode
    AND sessionCode = 32003
    AND sigle = 'INF1110'
  )
)
OR (
  EXISTS (
    SELECT *
    FROM GroupX g
    WHERE professorCode = p.professorCode
    AND sessionCode = 12004
    AND sigle = 'INF3180'
  )
  AND EXISTS (
    SELECT *
    FROM GroupX g
    WHERE professorCode = p.professorCode
    AND sessionCode = 12004
    AND sigle = 'INF2110'
  )
);

Четыре подзапроса не будут ужасно эффективными. Вместо этого вы можете сделать несколько соединений.

Если вы всегда будете искать два sigle значения для sessionCode, то вы можете изменить ответ Гордона, чтобы подсчитать, сколько соответствует каждому sigle, добавив его в предложение group-by:

[111 ]

Если бы у вас был профессор, который преподавал все четыре, то вы бы перечислили их дважды; если это может произойти, вы можете добавить свой DISTINCT обратно, хотя это немного не так. Вы также можете использовать подзапрос и IN, чтобы избежать этого:

SELECT p.firstName, p.lastName
FROM Professor p
WHERE ProfessorCode IN (
  SELECT professorCode
  FROM GroupX
  WHERE (sessionCode, sigle) IN ( (32003, 'INF1130'), (32003, 'INF1110'),
                                  (12004, 'INF3180'), (12004, 'INF2110')
                                )
  GROUP BY professorCode, sessionCode
  HAVING COUNT(*) = 2
)

(я изменил Group на GroupX, потому что это недопустимый идентификатор; потому что это ключевое слово. I Предположим, вы изменили свои настоящие имена - может быть, с другого языка?)

0
ответ дан Alex Poole 5 March 2019 в 19:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: