mysql - 在 WHERE 子句中使用子查询结果

标签 mysql sql sql-server

我想合并这两个选择,但我不太熟悉 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/

相关文章:

sql - 将两行合并为一行,同时替换空值

SQL生成每个组内的序列号

mysql - 给定特定日期,如何在mysql中获取上个月的第一天与同一工作日

mysql - "The total number of locks exceeds the lock table size"删除267条记录

mysql - 如何从 MySQL 中的存储过程访问远程 MicroSoft SQL Server 数据库

sql - Yii2 ActiveRecord : composite IN condition

sql-server - Delphi:基于互联网的数据源

sql-server - SSIS 到 Excel - Excel 公式没有自动运行?

php - fatal error : Call to a member function prepare() - On call function more one times

mysql - 无法从类型 [java.lang.Object[]] 转换为类型 [@org.springframework.data.jpa.repository.Query