为什么Inner-join在哪里包含错误的数据?

时间:2018-07-12 13:17:38

标签: mysql inner-join where-clause

在内部联接中使用where子句但在内部联接中未选择我在查询中要的内容。在这里,我只选择12月份数据,而innerjoin查询也选择之前的日期数据。

My Table

查询是:

SELECT
    p_sale_inv.datetime,
    p_sale_inv.sale_inv,
    p_sale_inv.Jobber,
    p_sale_part.stock_id,
    p_sale_part.quantity,
    p_sale_part.netamount,
    p_purch_stock.Price,
    p_sale_part.sale_inv
FROM
    p_sale_inv
INNER JOIN p_sale_part ON p_sale_inv.sale_inv = p_sale_part.sale_inv
INNER JOIN p_purch_stock ON p_sale_part.stock_id = p_purch_stock.stock_id
WHERE
    DATE_FORMAT(p_sale_inv.datetime, '%Y-%m-%d') BETWEEN '2018-07-12' AND '2018-07-12'

AND RESULT IS:

问题是: 为什么查询显示相同的日期?如上表所示,它们实际上是不同的。

1 个答案:

答案 0 :(得分:2)

查询返回p_sale_inv表的第二行,该行与p_sale_part表的两行连接。这就是为什么日期相同的原因:它们来自表的同一行。

(请注意,只有一行p_sale_inv具有与WHERE子句匹配的日期。因此,您不希望该表的两行都被返回。)

编辑: 也许这将有助于消除误解。这是删除了INNER JOIN的相同查询:

SELECT
    p_sale_inv.datetime,
    p_sale_inv.sale_inv,
    p_sale_inv.Jobber,
FROM
    p_sale_inv
WHERE
    DATE_FORMAT(p_sale_inv.datetime, '%Y-%m-%d') BETWEEN '2018-07-12' AND '2018-07-12'

您只会在表格中看到一行,其中一行的日期为7-12。如果删除“ WHERE”子句,则将看到两行和两个日期。是其他表的联接使您感到困惑。我认为您的下一步是了解表联接的工作方式。