SQL:获取正确的结果顺序

时间:2012-02-09 19:56:56

标签: sql

两张桌子 -

TRIDS - {srcid, id}

TR - {id, msgid}

我从报告中获取了一个msgid的列表,我运行了一个查询来从TRIDS表中获取src id。两个表中的id字段是连接键。 所以我尝试了类似的东西 -

SELECT
      TRIDS.srcid
FROM
      TRIDS
      JOIN TR
           ON TRIDS.id = TR.id
WHERE
     TR.msgid = 'value1' OR
     TR.msgid= 'value2' OR
     ....

通常情况下,我会得到40到50个'值'。

但是查询没有按特定顺序返回结果。
我想按照使用的值的顺序得到结果。对于例如

result for value 1
result for value 2
.
.
.

我尝试不使用OR并切换到IN语句

WHERE
    TR.msgid IN ('value1', 'value2', ....)

当我使用大约5-6个值进行测试时,结果是有序的。但是当我使用全部(大约40个)时,结果再次没有特别的顺序和整个地方。

我需要将结果整理好,因为他们必须返回另一个报告并对应各自的msgid。

感谢任何帮助。

由于

只是为了清楚

值没有特别的顺序。它就像值1 ='abc213',其对应的srcid ='786typ'。

问题是当我得到值(excel中的VB宏)时,msg id被填充到电子表格中,我必须将结果放回电子表格(另一个宏)。如果结果与值的顺序无关,则电子表格会搞砸。

例如
我发送的值为IN(value1,value2,value3)
我得到的结果是 - 结果 value1
结果 value3
结果 value2

不确定为什么会发生这种情况但会造成混乱

2 个答案:

答案 0 :(得分:2)

尝试使用ORDER BY

SELECT TRIDS.srcid FROM TRIDS JOIN TR on TRIDS.id=TR.id WHERE TR.msgid = 'value1' OR TR.msgid ORDER BY TRIDS.srcid asc

此外,您不必使用OR,最好使用IN

SELECT
  TRIDS.srcid 
FROM
  TRIDS
JOIN TR
   on TRIDS.id=TR.id 
WHERE
  TR.msgid in( 'value1','value2','value3'...)
ORDER BY
  TRIDS.srcid asc

答案 1 :(得分:0)

您是否考虑过创建一个新表来保存值并使用:

...
WHERE TR.msgid IN (SELECT Value FROM Values ORDER By Value)