这是我的问题
SELECT p.book FROM customers_books p
INNER JOIN books b ON p.book = b.id
INNER JOIN bookprices bp ON bp.book = p.book
WHERE b.status = 'PUBLISHED' AND bp.currency_code = 'GBP'
AND p.book NOT IN (SELECT cb.book FROM customers_books cb WHERE cb.customer = 1)
GROUP BY p.book, p.created_date ORDER BY p.created_date DESC
这是我的客户帐簿表中的数据,
我期望只有8,6,1的books id返回,但是query返回8,6,1,1
表结构在这里
CREATE TABLE "public"."customers_books" (
"id" int8 NOT NULL,
"created_date" timestamp(6),
"book" int8,
"customer" int8,
);
CREATE TABLE "public"."books" (
"id" int8 NOT NULL,
"created_date" timestamp(6),
"status" varchar(255) COLLATE "pg_catalog"."default",
)
CREATE TABLE "public"."bookprices" (
"id" int8 NOT NULL,
"currency_code" varchar(255) COLLATE "pg_catalog"."default",
"book" int8
)
你觉得我做错什么了。我真的不想用 p.created_date
在 group by
但我被迫使用,因为 order by
1条答案
按热度按时间uubf1zoe1#
外部查询中的联接太多:
注意,我替换了
NOT IN
与NOT EXISTS
. 我强烈地,强烈地劝阻你不要使用NOT IN
使用子查询。如果子查询返回NULL
价值观,那么NOT IN
完全不返回任何行。最好只是通过使用NOT EXISTS
.