按值列表排序

tvmytwxo  于 2021-07-26  发布在  Java
关注(0)|答案(3)|浏览(272)

我在社会媒体类型的应用程序,公司将上传从管理端的帖子,所有的用户都可以看到用户端的帖子。现在,我在用户设置中添加了一个选项,用户可以在上面设置希望看到的公司帖子,我将公司id和用户id的列表存储在 preference 表,现在在获取帖子时,我希望根据为该特定用户存储的公司ID按帖子排序。
搜索之后,我发现了这个例子:

select WorkerName, WorkerJob
from Worker
order by decode(WorkerJob,
            'Fisherman',1,
            'Doctor',2,
            'Policeman',3,
            'Nurse', 4) asc;

但在这个例子中,他们已经按解码顺序设置了硬编码值,但我想使用我存储在其中的公司id列表动态地进行设置 preference table。如何实现动态解码排序?

xe55xuns

xe55xuns1#

使用 PREFERENCE 中的表 ORDER BY 作为:

SQL>   SELECT *
  2      FROM preference
  3  ORDER BY sort_id;

   SORT_ID JOB
---------- ---------
         1 PRESIDENT
         2 MANAGER
         3 ANALYST
         4 SALESMAN
         5 CLERK

SQL>   SELECT e.ename, e.job
  2      FROM emp e
  3  ORDER BY (SELECT p.sort_id
  4              FROM preference p
  5             WHERE p.job = e.job);

ENAME      JOB
---------- ---------
KING       PRESIDENT
CLARK      MANAGER
BLAKE      MANAGER
JONES      MANAGER
FORD       ANALYST
SCOTT      ANALYST
WARD       SALESMAN
MARTIN     SALESMAN
ALLEN      SALESMAN
TURNER     SALESMAN
JAMES      CLERK
ADAMS      CLERK
MILLER     CLERK
SMITH      CLERK

14 rows selected.

SQL>
lh80um4z

lh80um4z2#

加入表格(做一个 LEFT JOIN 以防工人有未知/未列出的工作。)

select w.WorkerName, w.WorkerJob
from Worker w
left join preferences p on w.WorkerJob = p.WorkerJob
order by p.sort_order
sc4hvdpw

sc4hvdpw3#

你可以用 preference 表中的外部联接并使用 sort_order 具体如下:

select w.WorkerName, w.WorkerJob
from Worker w left join preference p
on w.WorkerJob = p.WorkerJob
order by p.sort_order

相关问题