首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Mysql SELECT ...WHERE IN (多个sub从多个表中选择)

Mysql SELECT ...WHERE IN (多个sub从多个表中选择)
EN

Stack Overflow用户
提问于 2019-06-09 23:40:16
回答 1查看 52关注 0票数 0

Mysql需要从一个表中获取数据,其中的in与另一个表中的列值相同。但是从另一个表中只能获取列值,其in与其他两个表中的列值相同(IN)。

各表如下:

表名为sales_invoices,包含列(下面我不会显示所有列,有些列是问题所必需的)。

IdInvoices | Date

包含列的表名purchase_invoices

IdInvoicesP | Date

包含列的表名items

IdI | IdGoodsServices | IdInvoices

包含列的表名goods_services

IdGs (唯一值)

下面是表之间的链接

IdGs = IdGoodsServices

IdInvoices ( items) = IdInvoices (sales_invoices) = IdInvoicesP

已尝试多种代码变体。在所有情况下都会出现错误。下面是最后使用的代码。

代码语言:javascript
复制
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

仅从一个表中尝试了子子选择,得到了一些结果,没有错误。

下面是查询

代码语言:javascript
复制
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` <= ? ) 

  )  

下面是工作代码(就像我之前测试的那样)。

代码语言:javascript
复制
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` <= ? ) 

)
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56515979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档