【问题标题】:displays only 1 data仅显示 1 个数据
【发布时间】:2021-03-16 05:48:41
【问题描述】:

我尝试查询数据,但是数据多于1,我只想显示1个数据,也就是第一个数据。

查询:

SELECT DISTINCT a.country_id,
                a.street_address,
                a.city,
                a.phone_number,
                a.location_id,
                b.ket
  FROM LOCATIONS a
  LEFT OUTER JOIN (SELECT DISTINCT y.country_id,
                                   y.country_name || ' ' || z.REGION_NAME AS ket
                     FROM countries y, regions z
                    WHERE y.REGION_ID = z.REGION_ID) b
    ON a.country_id = b.country_id;

【问题讨论】:

  • “第一”关于哪个列?您可以在问题中添加示例数据吗?

标签: sql oracle oracle11g


【解决方案1】:

您可以使用DENSE_RANK() 之类的分析函数,包括按country_id 排序(假设图像中的排序列)以带来第一行(包括平局),例如

SELECT country_id, street_address, city, phone_number, location_id, ket
  FROM
  (
    SELECT l.country_id,
           l.street_address,
           l.city,
           l.phone_number,
           l.location_id,
           c.country_name || ' ' || r.region_name AS ket,
           DENSE_RANK() OVER (ORDER BY l.country_id) AS dr
      FROM locations l
      LEFT JOIN countries c
        ON l.country_id = c.country_id
      LEFT JOIN regions r
        ON c.region_id = r.region_id
    )
  WHERE dr = 1     

【讨论】:

  • 不客气;删除我之前的评论。
【解决方案2】:

如果您只想从查询中获取第一行,请试试这个。

 SELECT DISTINCT a.country_id, a.street_address, a.city, a.phone_number, a.location_id, b.ket FROM LOCATIONS a LEFT OUTER JOIN (SELECT DISTINCT y.country_id, y.country_name || ' ' || z.REGION_NAME AS ket FROM countries y, regions z WHERE y.REGION_ID=z.REGION_ID) b ON a.country_id = b.country_id
order by a.country_id
    fetch first 1 rows only;

(我添加了 order by 子句(假设您想要第一个国家/地区的行)。没有 order by 子句,不能保证每次都有相同的行。)

【讨论】:

  • 如果没有order by,它将是无限行。我认为在 SQL 答案中总是应该说,没有显式order by 的表/结果集中没有 Nth 记录
  • 你是绝对正确的。我改变了答案。
  • 版本11g没有fetch子句。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-23
  • 2013-05-21
  • 2021-04-12
  • 2021-02-23
  • 2016-09-06
相关资源
最近更新 更多