php - MySQL - 从两个表中查找有多少匹配项(如找到 6/9)

标签 php mysql sql

我需要计算出两个表之间的匹配数。

目前,我正在使用此查询,它会生成找到匹配项的次数。

SELECT count(*) FROM products WHERE EXISTS (SELECT 1 FROM inventory WHERE products.products_id = inventory.product_id) AND products.orders_id = 'xxx'

如果有 5 个产品,其中 3 个可以在另一个表中找到 - 它返回“3.

我需要能够知道总共有多少行以及其中有多少行是匹配的——比如找到了 3/5。我该怎么做?

最佳答案

如果产品在库存中是唯一的,那么“正常”方式是:

SELECT count(*) as total, count(i.product_id) as matches
FROM products p LEFT JOIN
     inventory i
     ON p.products_id = i.product_id
WHERE p.orders_id = 'xxx';

如果inventory可以有重复项,那么一个简单的方法是:

SELECT count(distinct p.product_id) as total, count(i.product_id) as matches
FROM products p LEFT JOIN
     inventory i
     ON p.products_id = i.product_id
WHERE p.orders_id = 'xxx';

编辑:

如果您需要考虑数量:

SUM(CASE WHEN i.qty > 0 THEN 1 ELSE 0 END)

关于php - MySQL - 从两个表中查找有多少匹配项(如找到 6/9),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47094534/

相关文章:

php - Visual Web Developer 2010 Express 对 PHP 的支持如何?

php - 未选择数据库 PHP

mysql - 带 where 子句的生日

mysql - Mysql查询中的复杂重叠

sql - Order By [...] OFFSET [..] FETCH [...] 子句中的 fetch Next 和 fetch First 有什么区别?

PHP:如何从 JSON 数组中获取属性?

php - Laravel 阻止计划 :run from adding key to cache

mysql - 缩短 sql 查询

javascript - 单击背景颜色更改并保存在数据库中

php - 从日期值为 xxxx-xx-xx 的 sql 值中选择年份