如何为这种情况编写SQL Query

时间:2015-05-29 18:39:14

标签: mysql sql database oracle

我有两张桌子,一张是"批次"另一个是" BatchDetails"。 批处理具有BatchId,BatchName和TechId等列。 BatchDetails包含BatchDetailsId,BatchId和SubTechID等列。

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

现在我想从Batch中选择所有BatchName,其中TechId = 1并且对应于该BatchName,BatchDetails表有SubTechId = 1和SubTechId = 2.

1 个答案:

答案 0 :(得分:2)

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

假设规范是从batch返回行,batchdetails中至少有两个关联行,并且至少有一个关联行为{{ 1}}和至少一个subtechid=1

对于MySQL:

subtechid=2

使用 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

或者,计算不同的subtechid值并与常量

进行比较
 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

还有其他几种查询模式......