【问题标题】:mysql right join and conditionsmysql右连接和条件
【发布时间】:2012-07-30 20:31:12
【问题描述】:

在以下查询中,我正在连接一个表日历和第二个表,我需要在其中为查询指定一些参数。

表的连接是在字段calendar.datefield和store_product.created上进行的

问题是我按 id_store = 3 过滤,而 07/20/2012 store_product 表记录中的另一行有 id_store = 4,因此查询没有带来结果。有没有办法把这个结果显示为NULL,强制mysql忽略这种情况?

结果:(包含日期 2012-07-20 的行没有显示,因为它有其他 id_store)

DATE            price
2012-07-17      NULL
2012-07-18      700.00
2012-07-19      NULL
2012-07-21      NULL
2012-07-22      NULL
2012-07-23      NULL

我想显示

     DATE               price
     2012-07-17         NULL
     2012-07-18         700.00
     2012-07-19         NULL
->>> 2012-07-20         NULL
     2012-07-21         NULL
     2012-07-22         NULL
     2012-07-23         NULL

查询:

set @id_store = 3;
set @id_product = 11;

SELECT 
calendar.datefield as DATE,
t1.price
FROM
store_product t1
    RIGHT JOIN
calendar ON (DATE(t1.created) = calendar.datefield)
WHERE
(calendar.datefield BETWEEN ('2012-07-17') and ('2012-07-23'))
    AND (t1.id_store = @id_store OR t1.id_store is NULL)
    AND (t1.id_product = @id_product OR t1.id_product is NULL)
    AND (t1.created = (select 
        max(f2.created)
    from
        store_product f2
    where
        f2.id_store = t1.id_store
            and f2.id_product = t1.id_product
            and DATE(t1.created) = DATE(f2.created))
    OR t1.created is NULL)
GROUP BY DATE , t1.id_store , t1.id_product

【问题讨论】:

  • t1 上的所有条件都应在ON 子句中。
  • Tks Nikola.. 我把 id_store 和 id_product 放在 ON 子句中并且工作了..

标签: mysql sql join


【解决方案1】:

该记录无法显示(显然),因为您仅过滤了 ID 为 3 的商店。RIGHT JOIN 完成了它应该做的事情,然后您将使用过滤器进一步减少结果。我认为您必须在主代码中处理此问题才能为您添加“缺失”记录。我不认为 SQL 可以做你想做的事。

【讨论】:

  • 当然可以。您需要在ON 子句中添加条件。
猜你喜欢
  • 2011-04-29
  • 2015-10-28
  • 1970-01-01
  • 1970-01-01
  • 2013-08-23
  • 2015-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多