查询具有多个供应商的作业

set 发布于 2019-03-15 mysql 最后更新 2019-03-15 14:53 4 浏览

我正在尝试列出所有有多个供应商
的采购订单(pos)的作业信息 以下是两张表中的列

table pos
+--------+-------+------------+
| job_id | po_id |   vendor   |
+--------+-------+------------+
table jobs
+--------+---------+---------+
| job_id | cust_id | jobtype |
+--------+---------+---------+
目前,我对如何使用子查询返回列出超过1个供应商的作业感到迷茫。任何帮助,将不胜感激。 编辑>>>>
mysql> select j.*, vendor, count(vendor) as count 
from jobs j join pos p on p.job_id=j.job_id 
group by vendor 
having count(vendor) > 0;
此查询返回的结果几乎是正确的,只是它在表中显示两次相同的job_id,而不是重复时,我只想显示不同的job_id。试图使用独特的job_id返回'列job_id不明确' 这是团体的问题吗?我需要一个子查询吗?
已邀请:

eea

赞同来自:

步骤是:

  1. 使用job_id加入表格(INNER JOIN)
  2. 计算与每个职位记录关联的采购订单供应商(COUNT(DISTINCT pos.vendor))
  3. 仅包含具有多个PO供应商的作业(HAVING COUNT( DISTINCT pos.vendor) > 1)
    SELECT job_id, cust_id, jobtype, COUNT(DISTINCT pos.vendor)
      FROM jobs
      INNER JOIN pos ON jobs.job_id = pos.job_id
      GROUP BY job_id, cust_id, jobtype
      HAVING COUNT(DISTINCT pos.vendor) > 1
    

jeum

赞同来自:

我错过了什么。以下查询不满足哪部分内容?

SELECT j.* 
  FROM jobs j 
  JOIN pos p 
    ON p.job_id = j.job_id 
 GROUP 
    BY j.job_id 
HAVING COUNT(*) > 1;

eenim

赞同来自:

您可以使用聚合和having子句执行此操作:

select job_id
from pos p
group by job_id
having count(distinct vendor) > 0
我明白了,你想要所有工作信息:
select j.*
from job j
where job_id in (select p.job_id
                 from pos p
                 group by p.job_id
                 having count(distinct p.vendor) > 0
                )

psequi

赞同来自:

SELECT * FROM jobs
WHERE job_id IN (
  SELECT
  job_id
  FROM
  pos
  GROUP BY job_id
  HAVING COUNT(DISTINCT vendor) > 1
)