在不知道确切的 SQL 方言的情况下,我会执行INNER JOIN
:
SELECT ProductID, AccountID, ContractID
FROM X
INNER JOIN MemTable m ON m.ProductID = X.ProductID AND m.AccountID = X.AccountID
您现在添加Java
为标签,所以我认为地图在您的 Java 应用程序中是否正确?如果是这样,那就很难了——您实际上可能需要查询数据库一百万次。
另一方面,您可以构造一个包含单个大型 SQL 语句的字符串,如下所示:
SELECT * FROM X WHERE ProductID IN (...) AND AccountID IN (...)
您的循环仅填写以逗号分隔的产品 ID 和帐户 ID 列表。然后你发出一次该命令。例如,该命令应该如下所示,假设两个 ID 都是数字:
SELECT * FROM X WHERE ProductID IN (1,2,3,4) AND AccountID IN (99,88,77)
编辑
请注意,我的最后一个建议可能存在以下缺陷(您必须确定这对您来说是否真的是个问题):
假设您的地图包含 (1, 99) 和 (3, 77),但在表中X
还有额外的记录 (1, 77) 和 (3, 99)。我的查询结果将是 (1,99)、(3, 77)、(1, 77) 和 (3, 99),因为这两个 ID 不被视为“实体”,而是单独对待。
因此,只要存在包含给定 ProductID 和 AccountID 的任意组合的行,它们就会被返回。
假设您使用的数据库系统允许这样做,您可以将SELECT
语句扩展为如下内容:
SELECT ProductID, AccountID, ContractID FROM X WHERE ProductID = <ValueFromMap> AND AccountID = <ValueFromMap>
UNION ALL
SELECT ProductID, AccountID, ContractID FROM X WHERE ...
UNION ALL
...