为什么内部连接用where cluase显示错误的数据?

093gszye  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(284)

在内部联接中使用where子句,但内部联接并没有选择我在查询中要求的内容。这里我只选择12个jun数据,而innerjoin查询也选择以前的日期数据。

查询是:

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'


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

fxnxkyjh

fxnxkyjh1#

查询将返回 p_sale_inv 表,连接到两行 p_sale_part table。这就是日期相同的原因:它们来自表的同一行。
(请注意,只有一个 p_sale_inv 行的日期与where子句匹配。所以您不希望该表的两行都返回。)
编辑:也许这有助于消除误解。以下是删除内部联接的同一查询:

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子句,您将看到两行和两个日期。使您困惑的是与其他表的连接。我认为您的下一步是了解表联接是如何工作的。

相关问题