我有一个 SQL 查询,它根据多个条件从 TABLEA 中获取特定客户端代码的一行(LIMIT 1)。这是查询:
SELECT
`TABLEA`.`client_code`
FROM
`TABLEA`
WHERE
(
`TABLEA`.`accounting_date` = 202408
AND (
`TABLEA`.`FLAG1` = ''
OR `TABLEA`.`FLAG1` IS NULL
)
AND `TABLEA`.`client_code` ='A12'
AND (
`TABLEA`.`FLAG2` = ''
OR `TABLEA`.`FLAG2` IS NULL
)
AND (
`TABLEA`.`FLA3` = ''
OR `TABLEA`.`FLA3` IS NULL
)
AND (
`TABLEA`.`payment_closing_flag` = ''
OR `TABLEA`.`payment_closing_flag` IS NOT NULL
)
AND NOT (
`TABLEA`.`FLAG4` = 1
AND `TABLEA`.`FLAG4` IS NOT NULL
AND `TABLEA`.`record_status` = 'D'
AND `TABLEA`.`record_status` IS NOT NULL
AND `TABLEA`.`ABC_CODE` IN (0, 370, 380, 390, 400, 410, 420, 900)
AND `TABLEA`.`ABC_CODE` IS NOT NULL
)
) LIMIT 1;
该查询适用于单个 client_code,但我想对多个 client_code 值(例如“A12”、“A13”、“A14”等)执行它,并为每个客户端代码检索 LIMIT 1 结果。
这是我的限制:
由于行数很大(每个客户端有数百万行),我无法使用 GROUP BY 或 DISTINCT,并且我只需要检查每个客户端代码是否存在一条记录。 性能至关重要,并且对于此数据集使用 DISTINCT 或 GROUP BY 速度太慢。 有没有办法迭代多个客户端代码并在单个查询或单个执行块中为每个客户端代码执行此 LIMIT 1 查询?
假设您有一张包含所有客户列表的表格
TABLE_ALL_CLIENTS
。那么试试这个:
选择
TABLE_ALL_CLIENTS
,
案件
当存在时(
选择 *
来自 TABLEA
哪里 TABLEA
.client_code
= TABLE_ALL_CLIENTS
.client_code
)
然后 1
其他 0
如果存在则结束
来自 TABLE_ALL_CLIENTS
因此,您拥有值为 1 或 0 的客户端表,然后您可以从中再发出一个子请求以获得最终结果集