根据值列表中包含的一组值在Oracle中过滤

时间:2011-08-19 12:00:41

标签: asp.net sql oracle

我有以下两个表:

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 ID_SPECIALIZATION组来过滤数据。例如 我想只显示那些在5和6专业化的人,所以它只会返回第一个人。在ASP.NET Web表单中,将有两个列表框,左右按钮,在第一个LB中将有所有可能的特化,用户将选择其中一些作为第二个LB作为过滤选项。我不知道如何将此过滤条件放在sql查询中。谢谢你的帮助。

3 个答案:

答案 0 :(得分:3)

您可以使用以下内容:

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 :(得分:1)

一种方法:

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
        )

答案 2 :(得分:0)

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传入的值。