簡體   English   中英

為什么Inner-join在哪里包含錯誤的數據?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM