gpt4 book ai didi

MySQL:WHERE IN 和 JOIN 里面

转载 作者:行者123 更新时间:2023-11-29 06:08:25 31 4
gpt4 key购买 nike

我有 3 个 SQL 表。

游戏 wo_tenis_partidos

enter image description here

选择 wo_tenis_pronosticos

enter image description here

配额 wo_tenis_cuotas_ha2

enter image description here

我需要获取满足两个条件的所有行:

条件 1: 其中 CUOTA1 >= CUOTAMIN1 CUOTA2 >= CUOTAMIN2

条件 2: 添加条件 1 中出现的具有相同 ID_PARTIDO 的所有行

条件 1 很简单:

SELECT *               
FROM wo_tenis_partidos a
INNER JOIN wo_tenis_cuotas_ha2 c ON c.id_partido = a.id
INNER JOIN wo_tenis_pronosticos p ON p.id_partido = a.id
WHERE
a.resultado IS NULL
AND (c.cuota1 >= p.cuotamin1 OR c.cuota2 >= p.cuotamin2)

但是要添加条件 2,我需要这样做:

SELECT *               
FROM wo_tenis_partidos a
INNER JOIN wo_tenis_cuotas_ha2 c ON c.id_partido = a.id
INNER JOIN wo_tenis_pronosticos p ON p.id_partido = a.id
WHERE a.id IN (
SELECT a.id
FROM wo_tenis_partidos a
INNER JOIN wo_tenis_cuotas_ha2 c ON c.id_partido = a.id
INNER JOIN wo_tenis_pronosticos p ON p.id_partido = a.id
AND a.resultado IS NULL
AND (c.cuota1 >= p.cuotamin1 OR c.cuota2 >= p.cuotamin2)
)

这是正确的方法吗?还有另一个更优化的选择吗?

最佳答案

在第一个查询中不需要 INNER JOIN 并使用 EXISTS 而不是 IN 子句以获得更好的性能

SELECT *               
FROM wo_tenis_partidos aa
INNER JOIN wo_tenis_cuotas_ha2 c ON c.id_partido = aa.id
INNER JOIN wo_tenis_pronosticos p ON p.id_partido = aa.id
WHERE EXISTS (
SELECT 1
FROM wo_tenis_partidos a
INNER JOIN wo_tenis_cuotas_ha2 c ON c.id_partido = a.id
INNER JOIN wo_tenis_pronosticos p ON p.id_partido = a.id
AND a.resultado IS NULL
AND (c.cuota1 >= p.cuotamin1 OR c.cuota2 >= p.cuotamin2)
WHERE aa.id =a.id
)

关于MySQL:WHERE IN 和 JOIN 里面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39915564/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com