在WHERE子句中使用subselect结果

时间:2017-09-15 06:23:45

标签: mysql sql sql-server

我想合并这两个选项,但我对SQL不太了解。 我想在第二次选择时使用第一个选择的这两列(sAuftrag,sInfo1)的结果数据。

我必须通过知道SQL命令的OLEDB接口使用MS-Access DB。

首先选择:

SELECT DISTINCT sAuftrag, sInfo1 FROM tblStückliste 

结果是(count = 32):

BA15.00929 22
BA15.00929 6, .... ("BA15.00929" is sAuftrag, and "22" is sInfo1)

对于这32个的每个结果,我在WHERE子句中使用接收到的数据进行第二次选择。

第二次选择:

SELECT ID, (dwStückzahl*dwLänge) AS dwLaufmeter, dwDicke, dwBreite
FROM tblStückliste
WHERE sAuftrag = 'BA15.00929' AND sInfo1 = '22'

结果是(每个选择的计数= 1-4):

209 34860 17 78
210 47250 17 78
211 110250 17 78
....up to four

我尝试了很多变化来找到解决方案,例如

SELECT ID, (dwStückzahl*dwLänge) AS dwLaufmeter, dwDicke, dwBreite, SS.sAuftrag, SS.sInfo1
FROM tblStückliste,
    (SELECT DISTINCT sAuftrag, sInfo1 FROM tblStückliste) SS
WHERE sAuftrag = SS.sAuftrag AND sInfo1 = SS.sInfo1

编辑:##########################

好吧,我的桌子上有条目。这些条目可以通过字段sAuftrag和sInfo1来标识。所以你可以称之为组,我的表中有一组条目。下一步是计算(dwStückzahl*dwLänge)AS dwLaufmeter,并获得每个条目的ID,dwDicke,dwBreite。

此外,我想要添加组中所有条目的dwLaufmeter。

目标应该是知道每个组的dwLaufmeter,以及组中所有条目的所有ID。

这两个选择那里给我正确的数据,但我想在一个SELECT语句中这样做。

1 个答案:

答案 0 :(得分:1)

这似乎是你的解决方案:

SELECT ID, (dwStückzahl*dwLänge) AS dwLaufmeter, dwDicke, dwBreite, SS.sAuftrag, SS.sInfo1
FROM tblStückliste,
    (SELECT DISTINCT sAuftrag, sInfo1 FROM tblStückliste) SS
WHERE sAuftrag = SS.sAuftrag AND sInfo1 = SS.sInfo1

该查询的作用是在tblStückliste和SS之间创建一个INNER JOIN

但是,请注意“最佳实践”是使用“explict join”语法,更好的编写查询的方法是:

SELECT ID, (dwStückzahl*dwLänge) AS dwLaufmeter, dwDicke, dwBreite, SS.sAuftrag, SS.sInfo1
FROM tblStückliste
INNER JOIN (SELECT DISTINCT sAuftrag, sInfo1 FROM tblStückliste) SS
       ON sAuftrag = SS.sAuftrag AND sInfo1 = SS.sInfo1

此外,您应该使用表名或表别名

为每个列引用添加前缀
SELECT T.ID, (T.dwStückzahl*T.dwLänge) AS dwLaufmeter, T.dwDicke, T.dwBreite, SS.sAuftrag, SS.sInfo1
FROM tblStückliste T
INNER JOIN (SELECT DISTINCT sAuftrag, sInfo1 FROM tblStückliste) SS
       ON T.sAuftrag = SS.sAuftrag AND T.sInfo1 = SS.sInfo1