我的数据库里有两张桌子。在第一个表中,我有GroupName和LID列,在第二个表中,我有strSO、strLID和DefectDes列。LID列和strLID列具有相同的值。每个GroupName都有DefectDes,比如See Disposition Table和Not Disassembled。例如,一些组有一个See Disposition Table和一个Not Disassembled;有些组没有See Disposition Table。我想取这样的组名**有些组没有See Disposition Table。我写了这段代码
deneme=sorgu.executeQuery("SELECT DISTINCT GroupName FROM TableRun WHERE LID IN (SELECT strLID FROM TableResult WHERE strSO='"+SalesOrder+"' AND DefectDes='Not Disassembled')");
while(deneme.next())
{
System.out.println(deneme.getString("GroupName"));
}但它给了我错误的答案。
我的数据库表是这样的


答案是这样的
STG 1 HPT VANE
STG 11 HPC VANE
STG 2 HPT VANE
STG 3 HPC VARIABLE VANE
STG 4 HPC BLADE
STG 4 HPC VARIABLE VANE
STG 5 HPC BLADE
STG 6 HPC BLADE
STG 7 HPC VANE
STG 8 HPC VANE
STG 9 HPC BLADE
STG 9 HPC VANE在答案STG 1 HPT叶片中,有一个记录See Disposition Table和一个记录Not disassembled。我不想得到它。我只想得到所有的Not Disassembled盖子。我做错了什么?
发布于 2019-09-03 11:16:16
SELECT GroupName FROM TableResult left join TableRun on TableResult.strLID = TableRun.LID WHERE strSO='"+SalesOrder+"' AND DefectDes='Not Disassembled' group by GroupName发布于 2019-09-03 11:16:55
您需要使用连接而不是内联查询,而且我在数据表中找不到STG 1 HPT叶片。我不知道什么是LID of STG 1 HPT VANE,但希望这个查询能帮助您
deneme=sorgu.executeQuery("SELECT DISTINCT TRun.GroupName FROM TableRun TRun
inner join tableresult TResult on Trun.LID = TResult.strLID
WHERE TResult.strSO='"+SalesOrder+"' AND TResult.DefectDes='Not Disassembled' group by TRun.GroupName" );发布于 2019-09-03 11:38:50
这将连接所有DefectDes值,并使用HAVING claue进行筛选。
SELECT DISTINCT r.GroupName
FROM TableRun r
WHERE r.LID IN
(SELECT DISTINCT rs.strLID FROM TableResult rs
WHERE r.LID = rs.strLID AND rs.strSO='"+SalesOrder+"'
GROUP BY rs.strLID
HAVING group_concat(rs.DefectDes) LIKE '%Not Disassembled%'
AND group_concat(rs.DefectDes) NOT LIKE '%See Disposition Table%')https://stackoverflow.com/questions/57770322
复制相似问题