【问题标题】:SQL JOIN gives me 0 entry if stock has no product relationship [duplicate]如果库存没有产品关系,SQL JOIN 给我 0 个条目 [重复]
【发布时间】:2022-01-18 10:20:19
【问题描述】:

SQL 查询:

    SELECT 

         c.id AS c_id,c.image AS category_image,b.id AS p_id,b.image AS product_image,
         a.id as product_id,0 AS sc_id,0 AS sub_category,0 AS is_active2, a.*,b.*,c.*

     FROM stock_50644 a 

   JOIN product b ON a.product_id = b.id 

   JOIN category c ON b.category = c.id

     WHERE b.category=1 ORDER BY p_id ASC

如果stock_50644 没有product 条目,那么我得到的结果为空。如果库存为空,我如何让它返回所有库存值为空的产品

编辑:

PRODUCT                                  ; STOCK_50644
  id product_name        category_id     ;    id   product_id               price
---- -------- ---------- --------------- ;  ---- --------- ----- --------------
   1 name1                             1 ;     1   2                           15
   2 name2                             2 ;

如果我在下面的查询中输入WHERE b.id=1,我会得到正确的预期输出。

但是一旦我用ORDER BY b.id ASC LIMIT 1; 替换它,它就需要很长时间,然后#2013 - Lost connection to MySQL server during query

SELECT 

    c.id AS c_id, c.image AS category_image, b.id AS p_id, b.image AS product_image, 
    a.id AS product_id, 0 AS sc_id, 0 AS sub_category, 0 AS is_active2, a.*,b.*,c.* 

FROM stock_50644 a 
RIGHT JOIN product b ON a.product_id = b.id AND b.category = 1 
LEFT JOIN category c ON b.category = c.id 
WHERE b.id=1                                                

ORDER BY b.id ASC LIMIT 1;

【问题讨论】:

  • 尽量提供你想要的查询表和结果表的小表。这可能有助于我更好地了解你。我认为您需要右加入产品并左加入类别,但需要一个示例表来检查这一点。
  • @TOlaleye 完成。我已经编辑了我的问题,请看一下

标签: sql join


【解决方案1】:

category的限制从WHERE子句移到join的ON子句中:

SELECT 
    c.id AS c_id, c.image AS category_image, b.id AS p_id, b.image AS product_image,
    a.id AS product_id, 0 AS sc_id, 0 AS sub_category, 0 AS is_active2,
    a.*,b.*,c.*
FROM product b
LEFT JOIN stock_50644 a 
    ON a.product_id = b.id AND b.category = 1
LEFT JOIN category c
    ON b.category = c.id
ORDER BY p_id;

【讨论】:

  • 还有left join?
  • 左连接不起作用我得到相同的空结果。并且通过正确的加入,它需要永远加载并得到“在查询期间丢失与 MySQL 服务器的连接”错误。最后尝试了limit 1;。仍然需要永远
  • @TimBiegeleisen 我已经编辑了我的问题,请看一下
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-06
  • 1970-01-01
相关资源
最近更新 更多