0

我正在尝试列出具有多个供应商的采购订单 (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。尝试将 distinct 与 job_id 结合使用会返回“列 job_id 不明确”这是分组问题吗?我需要子查询吗?

4

4 回答 4

1
SELECT * FROM jobs
WHERE job_id IN (
  SELECT
  job_id
  FROM
  pos
  GROUP BY job_id
  HAVING COUNT(DISTINCT vendor) > 1
)
于 2013-05-16T14:30:30.687 回答
0

我错过了一些东西。以下查询不满足简报的哪一部分?

SELECT j.* 
  FROM jobs j 
  JOIN pos p 
    ON p.job_id = j.job_id 
 GROUP 
    BY j.job_id 
HAVING COUNT(*) > 1;
于 2013-05-16T15:45:46.297 回答
0

您可以使用聚合和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
                )
于 2013-05-16T14:30:22.813 回答
0

步骤是:

  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
    
于 2013-05-16T14:32:16.457 回答