如何在另一个SQL查询中使用SQL查询的结果

时间:2018-10-18 17:42:51

标签: mysql

我正在使用MySQL在vb.net中编写票务程序。

我想要的是使用从查询1获得的票证可能具有的 Statename (打开/关闭/保持/等),并在查询2中使用它来获取列表。 州名中的所有项,第一个查询的结果作为第一项。

我现在依次使用2个查询,但是我敢肯定可以在1个查询中完成。

查询1:

SELECT StateName 
  FROM Tickets t 
  JOIN States s
    ON s.stateID = t.StateID 
 WHERE TicketNumber = & *intTicketNumber*

->结果=“打开”

查询2:

SELECT StateName 
  from States 
 ORDER 
    BY(case when StateName = '" & *StrStateName* & "' then 0 else 1 end)
     , StateName desc

组合查询的所需结果应为:

  1. 打开
  2. 已分配
  3. 关闭
  4. 保留

如何将两个查询合并在一起? 任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

  • 您可以改为将States用作最左边的表,并对LEFT JOINstateID上的Tickets表进行TicketNumber。在加入条件中匹配TicketNumber,而不是Where
  • States作为最左边的表格将确保所有StateName值都将被考虑。
  • 对于特定的票证编号,t.StateId将是NULL(在LEFT JOINing之后),一个StateName(当前分配给票证)除外。
  • 您可以简单地按降序对t.StateId进行排序。票证的当前StateName将首先出现在列表中,其余的将排在后面。

尝试使用左联接:

SELECT s.StateName 
FROM States AS s
LEFT JOIN Tickets AS t 
  ON s.stateID = t.StateID AND 
     t.TicketNumber = $intTicketNumber  -- $intTicketNumber is the input variable
ORDER BY t.StateID DESC, 
         s.StateName DESC