我想合并这两个选择,但我不太熟悉 SQL。 我想在第二次选择时使用第一次选择的这两列(sAuftrag、sInfo1)的结果数据。
我必须通过了解 SQL 命令的 OLEDB 接口(interface)来使用 MS-Access DB。
首先选择:
SELECT DISTINCT sAuftrag, sInfo1 FROM tblStückliste
结果为(计数=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 语句中完成它。
最佳答案
这似乎是您的解决方案:
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
但是,请注意“最佳实践”是使用“显式联接”语法,编写查询的更好方法是:
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
关于mysql - 在 WHERE 子句中使用子查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46232999/