计算具有子查询的两个表的并集

时间:2018-12-07 20:34:28

标签: mysql union notin

我有这个工作查询。它具有子查询的数量。

SELECT 
  COUNT(*) AS total 
FROM
  (SELECT 
    COUNT(aset) 
  FROM
    `public_1` 
  WHERE `public_1`.`aset` NOT IN 
    (SELECT 
      asset_code 
    FROM
      application_detail 
    WHERE application_id = 6) 
    AND org_id = 7 
    AND status_id = 8 
  GROUP BY aset) t 

现在我需要与其他表进行合并,并从两个表中获取总计。该代码可以获取计数记录,但值不正确。

SELECT 
  COUNT(*) AS total 
FROM
  (SELECT 
    COUNT(aset) 
  FROM
    `public_1` 
  WHERE `public_1`.`aset` NOT IN 
    (SELECT 
      asset_code 
    FROM
      application_detail 
    WHERE application_id = 6) 
    AND org_id = 7 
    AND status_id = 8 
  UNION
  SELECT 
    COUNT(aset) 
  FROM
    `public_2` 
  WHERE `public_2`.`aset` NOT IN 
    (SELECT 
      asset_code 
    FROM
      application_detail 
    WHERE application_id = 6) 
    AND org_id = 7 
    AND status_id = 8 
  GROUP BY aset) z 

请协助我正确查询。预先感谢

1 个答案:

答案 0 :(得分:1)

使用SELECT COUNT(DISTINCT aset)来获取计数,然后将它们加在一起。

SELECT t1.total + t2.total AS total
FROM (
    SELECT COUNT(DISTINCT aset) AS total
    FROM `public_1` 
    WHERE `public_1`.`aset` NOT IN 
        (SELECT 
          asset_code 
        FROM
          application_detail 
        WHERE application_id = 6) 
        AND org_id = 7 
        AND status_id = 8) AS t1
CROSS JOIN (
    SELECT COUNT(DISTINCT aset) AS total
    FROM `public_2` 
    WHERE `public_2`.`aset` NOT IN 
        (SELECT 
          asset_code 
        FROM
          application_detail 
        WHERE application_id = 6) 
        AND org_id = 7 
        AND status_id = 8) AS t2