在MYSQL中,我们可以使用普通的SELECTSQL而不是使用存储过程来执行循环吗?
好吧,她是我的问题。我得到了一个有3列的表:C1,C2,C3 C1 - C2 - C3 M - is - M1 N2 - is - N3 M2 - is - M3 M3 - is - M4 N1 - is - N2 M1 - is - M2 N - is - N1 C1-C2-C3 M-is-M1 N2-is-N3 M2-is-M3 M3-is-M4 N1-is-N2 M1-is-M2 N-is-N1 因此,当用户搜索“M1”时,系统将显示: M1 M2 M3 M4 M3 M4 N N1 N2 N3 M1 平方米 M3 M4 当用户搜索“M3”时,系统将显示: M1 M2 M3 M4 M3 M4 N N1 N2 N3 M3 M4 当用户搜索“N”时,系统将显示: M1 M2 M3 M4 M3 M4 N N1 N2 N3 N N1 氮气 N3 显然,这种查询需要某种循环,即搜索“是”之后的任何单词,然后继续搜索该单词之后的单词 我想在MySQL中使用普通的“SELECTSQL”,而不是使用存储过程来完成这项任务。但我不知道该怎么做 我们必须使用“WITH”关键字吗 如何在不使用存储过程的情况下执行上述查询?您可以使用递归CTE完成此任务;不幸的是,mysql还不支持这些在MYSQL中,我们可以使用普通的SELECTSQL而不是使用存储过程来执行循环吗?,mysql,sql,loops,Mysql,Sql,Loops,好吧,她是我的问题。我得到了一个有3列的表:C1,C2,C3 C1 - C2 - C3 M - is - M1 N2 - is - N3 M2 - is - M3 M3 - is - M4 N1 - is - N2 M1 - is - M2 N - is - N1 C1-C2-C3 M-is-M1 N2-is-N3 M2-is-M3 M3-is-M4 N1-is-N2 M1-is-M2 N-is-N1 因此,当用户搜索“M1”时,系统将显示: M1 M2 M3 M4 M3 M4 N N1 N
但是,我要告诉您,您有一个更大的问题,因为您正在实现被称为“朴素树”的经典SQL反模式;我强烈建议您查看幻灯片,尤其是从幻灯片48开始的部分,作者将提供可行的替代方案,使您的问题更容易封装到数据库支持的SQL子集中。因此,坚持不使用存储过程的要求,可以使用以下查询:
SELECT t1.C1 AS Value1, t2.C1 AS Value2, t3.C1 AS Value3, t4.C1 AS Value4
FROM your_table t1
LEFT JOIN your_table t2 ON t1.C3=t2.C1
LEFT JOIN your_table t3 ON t2.C3=t3.C1
LEFT JOIN your_table t4 ON t3.C3=t4.C1
它将返回结果,例如M1 M2 M3 M4
。如果需要更多“循环”,您可以向查询中添加另一个左连接
:
SELECT t1.C1 AS Value1, t2.C1 AS Value2, t3.C1 AS Value3, t4.C1 AS Value4, t5.C1 AS Value5
FROM your_table t1
LEFT JOIN your_table t2 ON t1.C3=t2.C1
LEFT JOIN your_table t3 ON t2.C3=t3.C1
LEFT JOIN your_table t4 ON t3.C3=t4.C1
LEFT JOIN your_table t5 ON t4.C3=t5.C1
:
单个联接中可引用的最大表数
她61岁
您需要使用服务器端语言(PHP?)来检查Value2、Value3…ValueN是否为null
我的建议是使用存储过程,或者更改表架构,以避免以这种方式在表中循环。要搜索的术语是“传递闭包”。例如,见Thax you Jocelyn。