Фильтрация в Oracle на основе группы значений, содержащихся в списке значений - PullRequest
0 голосов
/ 19 августа 2011

У меня есть две таблицы:

ID_PERSON    NAME
-----------------
    1        John
    2        Joe
    3        Peter

ID_PERSON    ID_SPECIALIZATION
------------------------------
    1               5
    1               6
    1               7
    2               5
    2               1
    3               6
    3              10

Мне нужно отфильтровать данные по группе идентификаторов ID_SPECIALIZATION, которые будут предоставлены.Например, я хочу отображать только тех людей, которые имеют специализацию в 5 и 6, поэтому он вернет только первое лицо.В веб-форме ASP.NET будет два списка, левая и правая кнопки, в первом LB будут все возможные специализации, и пользователь выберет некоторые из них для второго LB в качестве параметров фильтрации.Я понятия не имею, как поставить это условие фильтрации в SQL-запрос.Спасибо за помощь.

Ответы [ 3 ]

3 голосов
/ 19 августа 2011

Вы можете использовать следующее:

SQL> SELECT p.id_person, p.NAME
  2    FROM person p
  3    JOIN person_spe s ON p.id_person = s.id_person
  4   WHERE id_specialization IN (5, 6)
  5   GROUP BY p.id_person, p.NAME
  6  HAVING COUNT(*) = 2;

 ID_PERSON NAME
---------- -----
         1 John
1 голос
/ 19 августа 2011

Один из способов сделать это:

SELECT 
    ID_PERSON
  , NAME
FROM 
    Person AS p
WHERE EXISTS
        ( SELECT *
          FROM
              PersonSpecialization AS ps
          WHERE ps.ID_PERSON = p.ID_PERSON
            AND ps.ID_SPECIALIZATION = 5
        )
  AND EXISTS
        ( SELECT *
          FROM
              PersonSpecialization AS ps
          WHERE ps.ID_PERSON = p.ID_PERSON
            AND ps.ID_SPECIALIZATION = 6
        )
0 голосов
/ 19 августа 2011
SELECT d1.id_person, d1.name FROM tbl_table1 d1
INNER JOIN tbl_table2 d1
ON d1.ID_PERSON=d2.ID_PERSON
WHERE ID_SPECILIZATION = ?

Theres запрос, но я не уверен, как asp.net работает и передает значение. Это может быть работа, ищущая переменные связывания, которые позволяют вам использовать заполнители в sql, которые oracle затем кэширует запрос и просто использует значения, которые вы передаете при запуске tuime, используя EXECUTE IMMEDIATE.

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