mysql - Mysql选择查询不在同一张表中
问题描述
我有一个名为 products 的表,有 3 列。其中一列是product_id。此列包含重复的产品 ID。从另一个来源,我得到了一些其他的产品 ID。我想显示不存在的产品 ID 计数。例如,我从一个来源获取产品 ID 12、13、14、15、16。在我的产品表中,我有 12、13、14。所以现在我想显示不存在的产品 ID 的计数。在这种情况下,应该是 2。为了实现这一点,我尝试了以下查询。
SELECT COUNT(DISTINCT product_id)
FROM products p1
WHERE NOT EXISTS
(SELECT COUNT(DISTINCT product_id)
FROM products p2
WHERE p2.product_id IN (12,13,14,15,16) AND p1.product_id = p2.product_id)
但我得到的是空的结果。任何帮助将不胜感激。
解决方案
如果产品列表来自应用程序,并且您也知道列表的长度(在本例中为 5),您可以在表格中找到不存在的产品的数量,如下所示:
SELECT 5 - COUNT(DISTINCT product_id) AS non_existent_products
FROM products
WHERE product_id IN (12, 13, 14, 15, 16)
输出
non_existent_products
2
如果您不知道列表的长度,可以使用例如
LENGTH('(12, 13, 14, 15, 16)') - LENGTH(REPLACE('(12, 13, 14, 15, 16)', ',', '')) + 1
更新
如果其他product_id
值来自另一个查询(例如),您可以使用该查询的结果中的一个与 products 表并从两者中获取 s 的差异来查找SELECT product_id FROM othertable
该结果中不在products
表中的产品计数. 像这样的东西:LEFT JOIN
COUNT
product_id
SELECT COUNT(DISTINCT q.product_id) - COUNT(DISTINCT p.product_id) AS non_existent_products
FROM (SELECT product_id FROM products2) q
LEFT JOIN products p ON p.product_id = q.product_id
推荐阅读
- google-bigquery - 昨天但不包括周日
- ios - swift get CalibratedMagneticField 始终为零
- r - 如何在 R 编程语言中创建双向链表?
- linux - Curl 无法在 CLI 上获取本地颁发者证书
- reactjs - 在生成构建反应给我们 TypeError: Cannot read property 'endsWith' of null
- ios - 如何避免覆盖 iPhone 上的安全区域,但至少改变它们的颜色?
- python - json.decoder.JSONDecodeError:期望用双引号括起来的属性名称:第 2 行第 1 列(字符 2)
- java - 在为作业搜索特定特殊字符时感到困惑
- android - 重新启动应用程序后更改某些字符串的语言环境 (Kotlin)
- javascript - Firebase Cloud Firestore 查询返回 Promise {
} 而不是在使用 async/await 时完成