为什么 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 是如何工作的。
在内连接中使用 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 是如何工作的。