【发布时间】:2014-07-04 14:15:32
【问题描述】:
我目前正在处理一个应该返回CONCENTRATOR 表中所有行的查询。但是,它必须可以按所有集中器的列以及部门名称和类型名称进行排序。
这里是集中器的专栏:
CONCENTRATOR_ID
NAME
INTERNALADDRESS
TYPE_ID
DEPARTMENT_ID
TYPE_ID 和 DEPARTMENT_ID 分别链接到 DEPARTMENT 表和 TYPE 表,并且都有一个 NAME 列。
这里是限制:
- 集中器可按 ID、姓名、地址、类型名称和部门名称排序
- 不同的部门名称(如果同一个集中器有2个部门,则只返回一行)
要恢复,我需要像 SELECT * 这样的集中器列,还需要 DISTINCT department.name,但看起来很复杂......我尝试了很多请求,但找不到任何一个工作。
有人可以帮帮我吗?
我正在寻找的请求应该是这样的:
SELECT DISTINCT d.NAME as "department.name", t.NAME as "type.name", *
FROM "CONCENTRATOR" c
LEFT OUTER JOIN "CONCENTRATOR_GROUP" USING(CONCENTRATOR_ID)
LEFT OUTER JOIN "GROUP" g USING(GROUP_ID)
LEFT OUTER JOIN "TYPE" t USING(TYPE_ID)
LEFT OUTER JOIN "DEPARTMENT" d USING(DEPARTMENT_ID)
ORDER BY TRIM(UPPER(c.name)) ASC
【问题讨论】:
-
能否给我们展示一些示例数据,以及示例输出。
-
您能确认 MS SQL-Server 是 RDBMS 吗?您的联接看起来不像 SQL-Server 语法。
-
抱歉我的错误,这是 Oracle 而不是 SQL Server,我编辑了标签。关于示例数据,您是在谈论此查询的结果吗?
-
OUTER关键字是可选的,可以用LEFT JOIN省略。 -
您的查询有什么问题 - 好吧,它会出错,因为您使用的是
*而不是c.*,而using()而不是on可能会给您带来问题。也许您可以使用这些表和其中的一些数据设置一个 SQL Fiddle,这是您当前查询的最佳尝试;并在问题中添加您希望该数据的输出是什么。目前很难说出你真正需要什么。如果一个集中器有两个部门,您将如何选择显示哪个部门?
标签: sql oracle sql-order-by distinct