Sql通过将两个列表传递给两列来检索数据

时间:2017-05-09 13:09:21

标签: sql

我在sql中有一个表,我想根据两列来检索数据 传递两个值列表。 例如: - 让我们考虑一个表名为“employee”的表

-----------------------------
| project_id |  resource_id  |
-----------------------------
|     7      |     46        |
-----------------------------
|     7      |     87        |
-----------------------------
|     5      |     87        |
------------------------------

我想基于两者中值的精确匹配来检索数据 列就像

"select * from employee where project_id = 7 and resource_id = 46;"

然后它返回第一行。如果查询将是这样的

"select * from employee where project_id in (7,5) and resource_id in 
(46,87);"

它将返回所有三行而不是第一行和第三行。 我可以理解'sql'引擎执行所有查询 给出的值的组合。但是,我需要查询来处理数据 对于上述值,以便返回第一行和第三行。有没有 解决方案? 提前谢谢。

3 个答案:

答案 0 :(得分:2)

如果您的dbms支持行类型等:

select *
from employee 
where (project_id, resource_id) in ((7, 46), (5, 87))

ISO / ANSI SQL合规性:

  

使用Core SQL-2003之外的以下功能:

     

F641,“行和表构造函数”

     

T051,“行类型”

     

F561,“全价值表达”

(根据http://developer.mimer.se/validator/parser200x/

答案 1 :(得分:0)

您似乎在寻找的是:

select * from employee 
where (project_id = 7 and resource_id = 46)
   or (project_id = 5 and resource_id = 87)

您的第二个查询确实会返回所有三行 - 它实际上要求project_id为7或5 resource_id为46或87的任何行 - 所有三行都符合此标准。

你出错的地方是期望两个IN条款相互关联

答案 2 :(得分:0)

您需要将您要查找的值放在单独的表中并像这样编写查询(Oracle示例):

with dataTable as (
select 7 project_id, 46 resource_id from dual
union
select 7, 87 from dual
union
select 5, 87 from dual)
,
 listOfValues as (
select 7, 46 from dual
union
select 5, 87 from dual
)
select * from dataTable where (project_id, resource_id) in (select * from listOfValues)