我有以下两个表:
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查询中。谢谢你的帮助。
答案 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传入的值。