【问题标题】:Cant figure out whats wrong with my query无法弄清楚我的查询有什么问题
【发布时间】:2020-10-03 17:46:11
【问题描述】:

我想根据书籍元关键字根据已购买书籍查找类似书籍,但下面的查询也返回用户已经购买的书籍。我需要带上没有购买但根据他的购买情况相似的书籍。希望这很清楚。

以下是查询、数据和结果的链接。 https://www.db-fiddle.com/f/tovUePp2WVffXLcuaxmJ8K/3

查询不应返回由以下查询返回的数据。但它也返回了一些以下数据。

SELECT c.book FROM customers_books c WHERE c.customer = 1

【问题讨论】:

  • 这个问题与这个问题有什么不同:stackoverflow.com/questions/64053471/… 你在哪里接受了答案?
  • 我知道,我发现它在更多数据后无法正常工作。
  • 那么您应该已经编辑了原始问题。这只是那个的副本。

标签: sql postgresql join


【解决方案1】:

您可以尝试以下查询吗? 我已将左连接添加到现有查询中以删除已购买的书籍。

SELECT bmk2.book
FROM book_meta_keywords bmk2
INNER JOIN book_meta_keywords bmk1 
                ON  bmk2.meta_keyword = bmk1.meta_keyword
INNER JOIN customers_books cb 
                ON bmk1.book = cb.book
INNER JOIN books b ON b.id = bmk2.book
LEFT JOIN customers_books cbp ON cbp.book = b.id 
                    and cbp.customer = 1
WHERE cb.customer = 1 AND b.status = 'PUBLISHED'
and cbp.book IS NULL
GROUP BY bmk2.book
ORDER BY MAX(b.modified_date) DESC ;

【讨论】:

    【解决方案2】:

    如果两个查询的形式相同,您可以简单地 EXCEPT。

    有关更多信息,请参阅此内容: https://www.techonthenet.com/postgresql/except.php

    【讨论】:

    • Postgres 不支持 MINUS - 只有标准的 EXCEPT 运算符
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 2013-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多