gpt4 book ai didi

具有独立 WHERE 子句的任意数量的表上的 MySQL JOIN

转载 作者:行者123 更新时间:2023-11-30 23:29:37 25 4
gpt4 key购买 nike

我正在构建一个包含大量潜在输入的复杂搜索应用程序。每个输入都是可选的。我正在尝试以模块化方式构建查询。

假设我有两个不同的查询,每个查询都有独立的 WHERE 条件:

SELECT * FROM t1 WHERE t1.c1 = x

SELECT * FROM t2 WHERE t2.c1 = y

我发现以下代码是有效的:

SELECT * FROM t1 INNER JOIN t2 ON t1.c2 = t2.c2 WHERE t1.c1= x AND t2.c1= y

但是,由于 WHERE 条件在末尾组合在一起,因此很难以模块化方式实现它。所以,我尝试了这个:

SELECT * FROM t1 WHERE t1.c1 = x INNER JOIN ON t1.c2 = t2.c2 WHERE t2.c1 = y

但是,此代码无效。使用独立的 WHERE 子句连接任意数量的表的最佳方式是什么?

最佳答案

表之间的连接可以有条件地实现——并且 where 子句连接在最后——像这样:

SELECT * 
FROM t1
INNER JOIN t2 ON t1.c2 = t2.c2
INNER JOIN t3 ON t1.c3 = t3.c3
INNER JOIN t4 ON t1.c4 = t4.c4
WHERE t1.c1 = x
AND t2.c2 = y
AND t3.c3 = z
AND t4.c4 = a

并且您可以根据用户选择的选项有条件地将其构建为字符串。

虽然动态构建 where 子句和 joins 可能有效,但可能存在一些需要注意的陷阱。

首先,连接仍然可能必须根据表连接在一起的自然方式进行自定义构建——例如,t3 可能只能连接到 t2 而不是 t1where 子句会遇到类似的问题。每个 where 子句都必须根据表中的列进行自定义构建。

换句话说,这个问题不太可能是完全可推广的。最后,您需要根据表的具体情况制作自定义 SQL。更糟糕的是,随着时间的推移,表会发生变化,SQL 也必须随之改变。如果您正在动态构建复杂的 SQL,您可能会让自己陷入维护的困境。

此外,随着应用的增长,您可能希望针对每个组合调整 SQL 以优化查询。确保在构建时尝试考虑到这一点。

关于具有独立 WHERE 子句的任意数量的表上的 MySQL JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11404843/

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