Sql 按返回结果的首次出现顺序排序

Sql 按返回结果的首次出现顺序排序,sql,Sql,我有两个表,希望根据表a中的参考id从表b中获取技术标签: select b.dbid, b.technology_tag from tblConnect a, tblSites b where a.Site_DBID = 2 and a.Related_Site_DBID = 1 and (b.dbid = a.bsc_tag_dbid or b.dbid = a.related_bsc_dbid or b.dbid = a.related_msc_dbid) 这里我想要的是根据第一

我有两个表,希望根据表a中的参考id从表b中获取技术标签:

select b.dbid, b.technology_tag 
from tblConnect a, tblSites b 
where a.Site_DBID = 2 
and a.Related_Site_DBID = 1 
and (b.dbid = a.bsc_tag_dbid or b.dbid = a.related_bsc_dbid or b.dbid = a.related_msc_dbid)
这里我想要的是根据第一次出现的情况对返回的行进行排序(在where子句中)


有人知道怎么做吗?

首先,在执行连接时,应该切换到使用实际的连接子句。也就是说,此ORDER BY子句应该满足您的要求:

SELECT
    B.dbid,
    B.technology_tag
FROM tblConnect A
INNER JOIN tblSites B ON
    B.dbid IN (A.bsc_tag_dbid, A.related_bsc_dbid, A.related_msc_dbid)
WHERE
    A.Site_DBID = 2 AND
    A.Related_Site_DBID = 1
ORDER BY
    CASE
        WHEN B.dbid = A.bsc_tag_dbid THEN 1
        WHEN B.dbid = A.related_bsc_dbid THEN 2
        WHEN B.dbid = A.related_msc_dbid THEN 3
        ELSE 4   -- Not really necessary, but I always use an ELSE when I use CASE
    END

首先,在执行联接时,应该切换到使用实际联接子句。也就是说,此ORDER BY子句应该满足您的要求:

SELECT
    B.dbid,
    B.technology_tag
FROM tblConnect A
INNER JOIN tblSites B ON
    B.dbid IN (A.bsc_tag_dbid, A.related_bsc_dbid, A.related_msc_dbid)
WHERE
    A.Site_DBID = 2 AND
    A.Related_Site_DBID = 1
ORDER BY
    CASE
        WHEN B.dbid = A.bsc_tag_dbid THEN 1
        WHEN B.dbid = A.related_bsc_dbid THEN 2
        WHEN B.dbid = A.related_msc_dbid THEN 3
        ELSE 4   -- Not really necessary, but I always use an ELSE when I use CASE
    END

我已经格式化了你的代码,这样其他人就有机会阅读了。您以后应该自己这样做-使用代码按钮
{}
标记代码,但也尽量不要在一行上显示太多。像上面这样的格式(这不是唯一可能的方法)可以让每个人(包括你自己)更容易找到查询的单独子句。我已经格式化了你的代码,这样别人就有机会阅读它。您以后应该自己这样做-使用代码按钮
{}
标记代码,但也尽量不要在一行上显示太多。像上面这样的格式(这不是唯一可能的方法)使每个人(包括你自己)都能更容易地找到查询的单独子句。但是现在查询需要花费很多时间来检索记录,你知道吗?首先,我将更改查询以使用正确的联接语法。然后确保表已正确索引。根据您使用的特定RDBMS,它可能包括用于分析查询的工具,以查看在哪里花费的时间最多。您还可以将OR语句更改为单个IN语句:
B.dbid IN(a.bsc\u tag\u dbid,a.related\u bsc\u dbid,a.related\u msc\u dbid)
您是对的(我忘了在该表上放置索引),再次感谢>最后一个问题:您刚才讨论的是连接语法:能否请您重新表述who查询,以查看它使用连接时的外观。我已经编辑了我的答案,将完整查询包含在连接语法中。不客气。不,谢谢你是必要的。。。投赞成票,接受答案;)但是查询现在需要很多时间来检索记录,你知道吗?首先,我将更改查询以使用正确的连接语法。然后确保表已正确索引。根据您使用的特定RDBMS,它可能包括用于分析查询的工具,以查看在哪里花费的时间最多。您还可以将OR语句更改为单个IN语句:
B.dbid IN(a.bsc\u tag\u dbid,a.related\u bsc\u dbid,a.related\u msc\u dbid)
您是对的(我忘了在该表上放置索引),再次感谢>最后一个问题:您刚才讨论的是连接语法:能否请您重新表述who查询,以查看它使用连接时的外观。我已经编辑了我的答案,将完整查询包含在连接语法中。不客气。不,谢谢你是必要的。。。投赞成票,接受答案;)