Sql 使用一个查询的(多个)结果作为另一个查询的输入
我正在用Vb.net和SQL编写一个票务程序 我有两个表需要在查询中使用。 一张表票证包含我需要的所有值。 第二个表Ticketactions包含链接到票证的所有Ticketactions 我想要的是创建一个搜索,搜索以下列: 票务描述 票务 动作描述 我有一个搜索功能,可以很好地搜索Tickets表Sql 使用一个查询的(多个)结果作为另一个查询的输入,sql,sql-server,multiple-results,Sql,Sql Server,Multiple Results,我正在用Vb.net和SQL编写一个票务程序 我有两个表需要在查询中使用。 一张表票证包含我需要的所有值。 第二个表Ticketactions包含链接到票证的所有Ticketactions 我想要的是创建一个搜索,搜索以下列: 票务描述 票务 动作描述 我有一个搜索功能,可以很好地搜索Tickets表 SELECT tickets.TicketNumber, tickets.Description, tickets.departmentname,
SELECT
tickets.TicketNumber,
tickets.Description,
tickets.departmentname,
tickets.devicename,
tickets.creatorname,
tickets.creationdate,
tickets.ExecutionDate,
tickets.closedate
stateName,
PriorityName,
FullName,
FROM tickets
INNER Join Users On Tickets.AssignedTo = Users.UserID
INNER Join States On Tickets.StateID = States.StateID
INNER Join Priorities On Tickets.priority = Priorities.PriorityID
WHERE Description Like '%SEARCHTEXT%' OR TicketNumber Like '%SEARCHTEXT%'
我想用TicketActions表中查询结果的附加ticketNumber展开上述查询
SELECT TicketNumber
FROM dbo.ticketaction
WHERE ActionDescription like '%SEARCHTEXT%'
因此,结果应该与第一个查询一样精确,但添加了第二个查询找到的ticketNumber
任何帮助都是非常受欢迎的,因为我真的不知道如何实现这一点你应该可以通过一个简单的联盟来实现这一点?下面是示例代码,但可能不是您真正想要的
你应该可以通过一个简单的联盟来做到这一点?下面是示例代码,但可能不是您真正想要的
要回答你字面上的问题,应该是这样的
SELECT
tickets.TicketNumber,
tickets.Description,
tickets.departmentname,
tickets.devicename,
tickets.creatorname,
tickets.creationdate,
tickets.ExecutionDate,
tickets.closedate
stateName,
PriorityName,
FullName,
FROM
tickets
INNER Join Users On Tickets.AssignedTo = Users.UserID
INNER Join States On Tickets.StateID = States.StateID
INNER Join Priorities On Tickets.priority = Priorities.PriorityID
WHERE tickets.Description Like '%SEARCHTEXT%'
OR tickets.TicketNumber Like '%SEARCHTEXT%'
OR tickets.TicketNumber IN (SELECT TicketNumber
FROM dbo.ticketaction
WHERE ActionDescription like '%SEARCHTEXT%'
)
更好的解决方案是在ticketAction表上使用联接
假设每张票都有一张票。如果不是这样,请使用左连接
或者,存在
要回答你字面上的问题,应该是这样的
SELECT
tickets.TicketNumber,
tickets.Description,
tickets.departmentname,
tickets.devicename,
tickets.creatorname,
tickets.creationdate,
tickets.ExecutionDate,
tickets.closedate
stateName,
PriorityName,
FullName,
FROM
tickets
INNER Join Users On Tickets.AssignedTo = Users.UserID
INNER Join States On Tickets.StateID = States.StateID
INNER Join Priorities On Tickets.priority = Priorities.PriorityID
WHERE tickets.Description Like '%SEARCHTEXT%'
OR tickets.TicketNumber Like '%SEARCHTEXT%'
OR tickets.TicketNumber IN (SELECT TicketNumber
FROM dbo.ticketaction
WHERE ActionDescription like '%SEARCHTEXT%'
)
更好的解决方案是在ticketAction表上使用联接
假设每张票都有一张票。如果不是这样,请使用左连接
或者,存在
这看起来像是一个标准的子查询,因此添加到顶部查询中,其中TicketNumber in SELECT TicketNumber FROM dbo.ticketaction where ActionDescription,如“%SEARCHTEXT%”,或者只需将ticketaction添加到顶部查询中,并在TicketNumberI上进行内部联接即可。在您的查询结束时,将另一个或和他在其注释中所述的内容放入。这看起来像是一个标准子查询,因此将TicketNumber添加到顶部查询中,其中SELECT TicketNumber FROM dbo.ticketaction中的ActionDescription(如“%SEARCHTEXT%”),或者将ticketaction添加到顶部查询中,并在TicketNumber上进行内部联接照里奇的建议去做。在你的问题结束时,写下另一个或,以及他在评论中所说的。这不是我想要的。我想从第二个查询中获取Ticketnumber,并将其作为第一个查询的Ticketnumber提供。没错,Rich,但我无法使其工作,因为第一个查询已经有联接…:阅读第一部分错误-抱歉,Rich评论了一个可行的解决方案。@Karstieman您只需要一个额外的内部联接行,即“票证上的内部联接票证编号=票证编号=票证编号。票证编号”和“ActionDescription like“%SEARCHTEXT%”位的附加or子句。为了在第一个查询中更清晰,我可能还会为PriorityName和FullName列添加表名。这不是我想要的。我想从第二个查询中获取Ticketnumber,并将其作为第一个查询的Ticketnumber提供。没错,Rich,但我无法使其工作,因为第一个查询已经有联接…:阅读第一部分错误-抱歉,Rich评论了一个可行的解决方案。@Karstieman您只需要一个额外的内部联接行,即“票证上的内部联接票证编号=票证编号=票证编号。票证编号”和“ActionDescription like“%SEARCHTEXT%”位的附加or子句。为了在第一次查询中清晰起见,我可能还会为PriorityName和FullName列添加表名。谢谢Mat,两种解决方案都有效!这正是我在寻找的Hanks Mat,你的两个解决方案都有效!这正是我想要的
SELECT
tickets.TicketNumber,
tickets.Description,
tickets.departmentname,
tickets.devicename,
tickets.creatorname,
tickets.creationdate,
tickets.ExecutionDate,
tickets.closedate
stateName,
PriorityName,
FullName,
FROM
tickets
INNER JOIN Users ON tickets.AssignedTo = Users.UserID
INNER JOIN States ON tickets.StateID = States.StateID
INNER JOIN Priorities ON tickets.priority = Priorities.PriorityID
INNER JOIN ticketAction ON ticket.TicketNumber = ticketAction.TicketNumber
WHERE tickets.Description Like '%SEARCHTEXT%'
OR tickets.TicketNumber Like '%SEARCHTEXT%'
OR ticketAction.ActionDescription LIKE '%SEARCHTEXT%'
SELECT
tickets.TicketNumber,
tickets.Description,
tickets.departmentname,
tickets.devicename,
tickets.creatorname,
tickets.creationdate,
tickets.ExecutionDate,
tickets.closedate
stateName,
PriorityName,
FullName,
FROM
tickets
INNER Join Users On Tickets.AssignedTo = Users.UserID
INNER Join States On Tickets.StateID = States.StateID
INNER Join Priorities On Tickets.priority = Priorities.PriorityID
WHERE tickets.Description Like '%SEARCHTEXT%'
OR tickets.TicketNumber Like '%SEARCHTEXT%'
OR EXISTS (SELECT *
FROM dbo.ticketaction
WHERE ActionDescription like '%SEARCHTEXT%'
AND TicketNumber = tickets.TicketNumber
)