2013-05-16 82 views
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的以显示。试图使用不同的job_id返回'列job_id不明确' 这是一个群体的问题?我需要一个子查询吗?

回答

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 
       ) 
+0

这里使用的别名 – Drew

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

的步骤是:

  1. 使用job_id()加入表格)
  2. 计数每个作业记录相关联的PO供应商(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 
    
+0

谢谢蒂姆!我意识到,只要我发布 - 这是一读起初误解了这个问题的情况。当您发布评论时,我正在编辑我的答案。更新后的答案应该没问题,或者至少它会做我认为*问题问的问题:)再次,谢谢。 –

0

我想的东西。下面的查询不满足哪部分内容?

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