为什么 Inner-join 显示带有 where 子句的错误数据?

Why Inner-join shows wrong data with where cluase?

在内连接中使用 where 子句但内连接不是select我在查询中要求的。这里我只 select 12 月的数据,而 innerjoin 查询 select 以前的日期数据。

查询是:

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'

问题是: 为什么查询显示相同的日期?实际上,正如您在上面看到的 table 它们是不同的。

查询返回 p_sale_inv table 的第二行,连接到 p_sale_part table 的两行。这就是日期相同的原因:它们来自 table.

的同一行

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

编辑: 也许这将有助于消除误解。这是删除了 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'

您只会看到 table 中的一行,即日期为 7-12 的那一行。如果删除 'WHERE' 子句,您将看到两行和两个日期。使您感到困惑的是与其他 table 的连接。我想你的下一步是了解 table join 是如何工作的。