2016-11-13 119 views
0

对不起,我不知道如何将问题的标题字。 我有一个表像这样MySQL查询根据另一列找到匹配的列?

Prod  Part  Number 

0001  101  3 
0001  102  2 
0001  103  1 

0002  101  3 
0002  102  2 
0002  103  4 

0003  101  2 
0003  102  3 
0003  103  6 

0004  101  3 
0004  102  2 
0004  103  1 

我想找到有每个零件的所有零件正确数量的产品。 因此,像

SELECT Prod from table 
WHERE  (Number of Part(101)) = 3 
     AND (Number of Part(102)) = 2 
     AND (Number of Part(103)) = 1 

输出将是:

Prod 
0001 
0004 

我怎样才能做到这一点?

+0

请根据您的样品数据提供所需的输出。 –

+0

@ PM77-1已更新 – J13t0u

回答

0

你可以使用一些内部联接

select t1.Prod from 
    (select Prod 
    from my_table 
    where part = 101 
    and Number = 3) t1 
    inner join 
    (select Prod 
    from my_table 
    where part = 102 
    and Number = 2) t2 on t1.Prod = t2.Prod 
    inner join 
    (select Prod 
    from my_table 
    where part = 103 
    and Number = 1) t3 on t1.Prod = t3.Prod 

http://sqlfiddle.com/#!9/014fe4/8

+0

感谢您的回答,我该如何获得一列? http://sqlfiddle.com/#!9/014fe4/4 – J13t0u

+0

@ J13t0u回答更新..希望是你在找什么 – scaisEdge

+0

谢谢,但是当它达到10+时它非常慢。我只是想用另一张桌子。 – J13t0u

0

通过有条件聚集:

SELECT Prod, 
     SUM(CASE WHEN Part = 101 AND Number = 3 OR 
        Part = 102 AND Number = 2 OR 
        Part = 103 AND Number = 1 
      THEN 1 ELSE 0 END) sum 
FROM tbl 
GROUP BY Prod 
HAVING sum = 3 

这会给你一个额外的列。如果这是个问题,那么将所有内容都包含到另一个SELECT中

+0

试图做到这一点sqlfiddle,似乎无法得到它的工作。 http://sqlfiddle.com/#!9/014fe4/5 – J13t0u

+0

目前无法访问小提琴。当我回家时会尝试。 –

+0

修正:http://sqlfiddle.com/#!9/014fe4/13 –

相关问题