sqlite 按两列中的一列对查询结果进行排序

t9eec4r0  于 2023-02-23  发布在  SQLite
关注(0)|答案(1)|浏览(180)

我有这张table:

CREATE TABLE Foo
(
    id_key INTEGER PRIMARY KEY,
    key1 INTEGER NOT NULL,
    seq_num1 INTEGER NOT NULL,
    key2 INTEGER,
    seq_num2 INTEGER,
    data BLOB NOT NULL
);

我想在key1key2匹配时选择data,这很简单:

SELECT data 
FROM Foo 
WHERE (key1 = ? OR key2 = ?)

但是我想根据表中的行key1key2中匹配的内容,按seq_num1seq_num2对该查询的结果进行排序。
我认为这样的事情应该行得通:

SELECT data 
FROM Foo 
WHERE (key1 = ? OR key2 = ?) 
ORDER BY 
    CASE 
        WHEN key1 = ? 
            THEN seq_num1 
            ELSE seq_num2 
    END

但是我不确定这是不是最优的解决方案,因为在这个查询中我比较了key1两次,而比较一次就足够了。
我使用sqlite3。

yshpjwxd

yshpjwxd1#

这可能是你想要的吗?我不使用sqlite,但这个mysql命令似乎可以被sqlite理解。

select
  data, seq_num1 as seq
from Foo
  where key1 = ?
union
select
  data, seq_num2 as seq
from Foo
  where key2 = ?
order by seq;

相关问题