簡體   English   中英

Mysql SELECT…WHERE IN(從多個表中選擇多個子)

[英]Mysql SELECT … WHERE IN (multiple sub selects from multiple tables)

Mysql需要從一個表中獲取數據,其中id與另一表中的列值相同。 但是必須從另一個表中僅獲取列值,其ID與其他兩個表中的列值相同( IN )。

表如下:

具有列的表名稱sales_invoices (在下面,我未顯示所有列,而是顯示了該問題所需的列)。
IdInvoices | Date

表名稱purchase_invoices與列
IdInvoicesP | Date

帶列的表名稱items
IdI | IdGoodsServices | IdInvoices

表名稱goods_services與列
IdGs (唯一值)

這是表格之間的鏈接
IdGs = IdGoodsServices
IdInvoicesitems )= IdInvoicessales_invoices )= IdInvoicesP

嘗試了代碼的多種變體。 在所有情況下,都會出錯。 下面是最后使用的代碼。

SELECT count(DISTINCT `IdGs`) FROM `goods_services` WHERE `IdGs` IN 

  ( SELECT `IdGoodsServices` FROM `items` WHERE `IdInvoices` IN 

    ( SELECT `IdInvoices`, `IdInvoicesP` FROM 
    `sales_invoices`, `purchase_invoices` WHERE `Date` <= ? ) 

  )  

想要計算在特定日期之前發出(寫)的銷售和購買發票中包含的IdGs (產品或商品/服務代碼)。

goods_servicessales_invoices / purchase_invoices之間沒有直接鏈接。 items被鏈接到兩個goods_services和( sales_invoices / purchase_invoices

與上面的代碼得到錯誤
SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'Date' in where clause is ambiguous

嘗試從子表中僅選擇一個子表,獲得一些結果且沒有錯誤。
這是查詢

SELECT count(DISTINCT `IdGs`) FROM `goods_services` WHERE `IdGs` IN 

  ( SELECT `IdGoodsServices` FROM `30u2s5r_items` WHERE `IdInvoices` IN 

    ( SELECT `IdInvoicesP` FROM 
    `30u2s5r_purchase_invoices` WHERE `Date` <= ? ) 

  )  

下面是工作代碼 (如我到目前為止測試的那樣)。

SELECT count(DISTINCT `IdGs`) FROM `goods_services` WHERE `IdGs` IN 

 (SELECT `IdGoodsServices` FROM `items` WHERE 

 `IdInvoices` IN 

  (SELECT DISTINCT `IdInvoices` FROM `sales_invoices` 
  WHERE `sales_invoices`.`Date` <= ? ) 

   OR 

  `IdInvoices` IN 
  ( SELECT DISTINCT `IdInvoicesP` FROM `purchase_invoices` 
  WHERE `purchase_invoices`.`Date` <= ? ) 

)

使用Purchase_invoices.Date或sales_invoices.Date

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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