[英]Why Inner-join shows wrong data with where cluase?
在內部聯接中使用where子句但在內部聯接中使用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'
問題是:為什么查詢顯示相同的日期? 如上表所示,它們實際上是不同的。
該查詢將返回p_sale_inv
表的第二行,並將其與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”子句,則將看到兩行和兩個日期。 是其他表的聯接使您感到困惑。 我認為您的下一步是了解表聯接的工作方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.