Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用和查询多对一_Sql_Sql Server - Fatal编程技术网

Sql 使用和查询多对一

Sql 使用和查询多对一,sql,sql-server,Sql,Sql Server,我有一个问题跟踪web应用程序表,该程序将问题映射到票号。一个给定的问题(假设)可以有无限数量的票证映射到它。我想执行一个SQL查询,该查询将得到一个可能附加了多个票证的问题 例如: issue_id | ticket_id -------------------- 1 | 100 1 | 101 2 | 101 (SQL FIDLE:) (一点背景知识)我正在为这个web应用开发一个新的搜索页面,其中一个可搜索的字段是票号。用户可以指定要

我有一个问题跟踪web应用程序表,该程序将问题映射到票号。一个给定的问题(假设)可以有无限数量的票证映射到它。我想执行一个SQL查询,该查询将得到一个可能附加了多个票证的问题

例如:

issue_id | ticket_id
--------------------
   1     |   100
   1     |   101
   2     |   101
(SQL FIDLE:)

(一点背景知识)我正在为这个web应用开发一个新的搜索页面,其中一个可搜索的字段是票号。用户可以指定要搜索的任意数量的票证号码

假设一个用户试图找到所有的问题编号,这些编号对应着票号100和101。以下SQL查询不返回任何行:

select issue_id 
from tickets
where ticket_id = 100 and ticket_id = 101;
有人能给我指出正确的方向吗?有没有一种方法可以通过一个查询有效地完成上述工作?请注意,查询中可能返回数百个问题编号(票证编号只是更大查询的一小部分),因此我希望这尽可能简单


谢谢。

您的
表应该是一张。然而

select issue_id 
from tickets
where ticket_id in (101,102)
group by issue_id
having count(distinct ticket_id) = 2
select distinct issue_id
from tickets t
where exists (select 1 from tickets where ticket_id = 100 and issue_id = t.issue_id)
    and exists (select 1 from tickets where ticket_id = 101 and issue_id = t.issue_id);
或:

我会照你说的做。后者往往更容易理解,但前者往往表现得更好

您也可以这样做,但这是一个集合操作查询,通常不鼓励这样做。然而,SQLFiddle上的执行计划表明这是三者中最好的

select issue_id from tickets where ticket_id = 100
intersect
select issue_id from tickets where ticket_id = 101;
至少还有另外一种方法可以做到这一点,使用self
内部连接

另一个选项:

select ticket100.issue_id
from (select issue_id from tickets where ticket_id = 100) as ticket100 
inner join (select issue_id from tickets where ticket_id = 101) as ticket101
on ticket100.issue_id = ticket101.issue_id

性能表上不知道这在哪里,但我想到了这一点。

此查询将获得附有多张票证的问题ID,但是我想做的是——对于一个给定的可能的票号列表——得到所有这些票号都附在一起的问题。我的第一个问题不是特别清楚我想查询什么(或什么)。我已经更新了一些关于用例的背景知识。太棒了,这些都是完美的。
select ticket100.issue_id
from (select issue_id from tickets where ticket_id = 100) as ticket100 
inner join (select issue_id from tickets where ticket_id = 101) as ticket101
on ticket100.issue_id = ticket101.issue_id