我正在使用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
组合查询的所需结果应为:
如何将两个查询合并在一起? 任何帮助将不胜感激!
答案 0 :(得分:2)
States
用作最左边的表,并对LEFT JOIN
和stateID
上的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