【问题标题】:Error while using INNER JOIN in PostgreSQL?在 PostgreSQL 中使用 INNER JOIN 时出错?
【发布时间】:2018-08-14 04:58:08
【问题描述】:

由于我是 PostgreSQL 新手,所以我使用 PostgreSQL sample database 来学习和练习 PostgreSQL。我的问题陈述是找到在 4 月 10 日至 13 日期间租用电影的前 15 名最高消费客户的付款?我的查询如下:

SELECT customer.first_name,payment.amount
FROM customer
  INNER JOIN payment ON customer.customer_id = payment.customer_id
WHERE customer_id IN (SELECT customer_id 
                      FROM (
                        SELECT customer_id, SUM(amount)
                        FROM payment
                        WHERE extract(month from payment_date) = 4
                        AND extract(day from payment_date) BETWEEN 10 AND 13
                        GROUP BY customer_id
                        HAVING SUM(amount) > 5
                        ORDER BY SUM(amount) DESC
                        LIMIT 15
                      ) AS top_fifteen);

我收到以下错误:

relation "customer" does not exist

我不确定为什么我会在这里遇到这个异常,有人可以帮我解决这个问题吗?任何线索都受到高度赞赏。

【问题讨论】:

  • 关系“客户”不存在意味着名为客户的表或视图在运行 SQL 的位置不存在。 - 检查您使用的是正确的数据库,客户表是否在相同的模式中(您可能需要 dbo.Customer)或者您在正确的服务器中运行查询 -(也区分大小写)例如客户与客户可以被认为是不同的
  • 您是否在 dvdrental 数据库的上下文中运行此查询?
  • 我正在使用正确的数据库和服务器,因为我能够正确运行其他查询。是的,我在 dvdrental db 的上下文中运行它。
  • 您是在 GUI 工具(即 PgAdmin X)还是从命令行运行它?

标签: sql postgresql join subquery


【解决方案1】:

使用如下表别名并尝试

SELECT c.first_name,p.amount
FROM customer c
INNER JOIN payment p
ON c.customer_id = p.customer_id
WHERE c.customer_id IN 
(
SELECT customer_id FROM 
    (
SELECT  customer_id, SUM(amount)
FROM payment
WHERE extract(month from payment_date) = 4
AND extract(day from payment_date) BETWEEN 10 AND 13
GROUP BY customer_id
HAVING SUM(amount) > 5
ORDER BY SUM(amount) DESC
LIMIT 15) AS top_fifteen);

我将您的查询改写如下

select * from
 (
 select  c.first_name,c.last_name,
 sum(amount) as pay_amount,
 count(p.customer_id) pay_num from payment p
 inner join Customer c on  p.customer_id=c.customer_id
     where extract(month from p.payment_date) = 4
AND extract(day from p.payment_date) BETWEEN 10 AND 13
 group by c.first_name,c.last_name,p.customer_id
 ) T 
 order by pay_amount desc
 Limit 15

【讨论】:

  • @KeshavTaparia 你能检查一下执行 select * from customer 会返回这个查询吗
  • @KeshavTaparia 我已经更改了您的查询,请检查一下
  • 看起来这是一个中间问题。问题现在得到解决。感谢您的调查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-07
  • 2015-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-30
  • 2019-02-03
相关资源
最近更新 更多