2015-05-29 86 views
-2

我有两个表格,一个是“Batch”,另一个是“BatchDetails”。 批处理有像BatchId,BatchName和TechId这样的列。 BatchDetails有像BatchDetailsId,BatchId和SubTechID这样的列。如何为这种情况编写SQL查询

BatchDetails表通过“BatchId”与批处理表连接。 “Batch”和“BatchDetail”表之间存在一对多关系。 一个批次在BatchDetails表中有多个条目。

现在我想从批处理选择所有BatchName其中TechId = 1并且对应于该BatchName,BatchDetails表具有SubTechId = 1和SubTechId = 2。

+5

为什么这个标签甲骨文*和* MySQL的? – tadman

+1

贾斯汀,你想要查询每种查询语言,或者什么?请注明 – Fallenreaper

回答

2

有几种方法可以返回指定的结果。

假设规范是从batchbatchdetails具有至少两个相关联的行返回行,并且这些相关联的行中的至少一个是subtechid=1和至少一个与subtechid=2

对于MySQL:

SELECT b.batchname 
    FROM batch b 
    JOIN batchdetail d1 
    ON d1.batchid = b.batchid 
    AND d1.subtechid = 1 
    JOIN batchdetail d2 
    ON d2.batchid = b.batchid 
    AND d2.subtechid = 2 
    WHERE b.techid = 1 
    GROUP BY b.batchid 
    ORDER BY b.batchname 

也有可能获得使用EXISTS谓词同样的结果:

SELECT b.batchname 
    FROM batch b 
    WHERE b.techid = 1 
    AND EXISTS (SELECT 1 
        FROM batchdetail d1 
        WHERE d1.batchid = b.batchid 
        AND d1.subtechid = 1 
       ) 
    AND EXISTS (SELECT 1 
        FROM batchdetail d2 
        WHERE d2.batchid = b.batchid 
        AND d2.subtechid = 2 
       ) 
    ORDER BY b.batchname 

,或者让subtechid和比较不同值的数量为恒定

SELECT b.batchname 
    FROM batch b 
    JOIN batchdetail d 
    ON d.batchid = b.batchid 
    AND d.subtechid IN (1,2) 
    WHERE b.techid = 1 
    GROUP BY b.batchid 
HAVING COUNT(DISTINCT d.subtechid) = 2 
    ORDER BY b.batchname 

还有一些其他的查询模式...

+1

谢谢spencer7593。 它工作正常。 –

相关问题