【问题标题】:How to select all records but order by a related table's column?如何选择所有记录但按相关表的列排序?
【发布时间】:2013-09-19 15:07:39
【问题描述】:

我有以下表格:

  1. 关键字,
  2. keywords_clients,
  3. keywords_groups,
  4. 客户,
  5. 群组

表 2 和表 3 用于关键字和组以及关键字和客户之间的多对多关系。

我想从关键字表中检索所有记录。但是,我想以这样一种方式对关键字进行排序,即属于特定组的关键字首先出现。我如何做到这一点?

我希望这是有道理的,并真诚地感谢任何帮助。

【问题讨论】:

    标签: sql postgresql select join


    【解决方案1】:

    您需要连接所有要使用的表,但您应该将选择列表限制为仅对您很重要的那些列。尽管SELECT * 提供给您,但不必从所有表中选择所有列。

    类似这样的:

    SELECT k.*
      FROM keywords k
      JOIN keyword_groups kg ON k.k_id=kg.k_id
      JOIN groups g ON kg.g_id=g.g_id
     ORDER BY CASE WHEN g.class='Top' THEN 0 ELSE 1 END, g.name, k.name;
    

    如果您只需要查看特定组,只需为其添加 WHERE 子句即可。

    【讨论】:

    • g.class='Top' 是什么意思?
    • @Sid,这只是对可能列中可能值的猜测。请分享您的架构详细信息以获得更合适的查询。
    猜你喜欢
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多