在内部联接中使用where子句但在内部联接中未选择我在查询中要的内容。在这里,我只选择12月份数据,而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'
问题是: 为什么查询显示相同的日期?如上表所示,它们实际上是不同的。
答案 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”子句,则将看到两行和两个日期。是其他表的联接使您感到困惑。我认为您的下一步是了解表联接的工作方式。