以下查询使用连接操作,我希望在不使用连接操作的情况下执行相同的查询。有可能这样做吗?如果是,我该怎么做?
select jname, jcode from heardt inner join judge ON heardt.jud1 = jcode
我试图这样做的原因是因为我正在使用odbc连接mysql和连接操作根本没有执行因为网页加载无限长并且没有给出任何输出。这就是我想在不使用连接操作的情况下尝试的原因
答案 0 :(得分:2)
我不知道你的理由,我发现JOINS更容易阅读,但你可以通过加入(没有双关语)where子句中的表来替换它们。
select jname
, jcode
from heardt
, judge
where heardt.jud1 = judge.jcode
答案 1 :(得分:1)
该查询没有其他过滤器。它可能导致查询返回许多行。这可能会导致速度减慢,具体取决于表中的记录数。
您应该考虑限制查询中返回的记录数。
如果JCode字段上有索引,则需要检查其他内容
答案 2 :(得分:0)
Select jname, jud1 from heardt where not jud1 is null
编辑:好的,这很快。那么:你为什么需要'加入'?
答案 3 :(得分:0)
查询Select jname, jud1 from heardt where not jud1 is null
显示jud1有一个值,但不是该值有效。连接或where验证表之间的关系。
如果你的查询需要花费很长时间来执行连接,那么很可能你没有对表进行正确的索引,导致进行表扫描而不是索引搜索。
答案 4 :(得分:0)
我正在使用odbc连接mysql和连接操作没有被执行,因为网页加载无限长并且没有给出任何输出。这就是我想在不使用连接操作的情况下尝试的原因
这可能不是因为您的JOIN
没有被执行,而是因为您的JOIN
查询花了太长时间。 那是可能是因为你没有定义正确的索引(索引,最好是judge.jcode
上的聚簇索引)。
如果在添加这样的索引后连接仍然花费太长时间,您可以考虑使用表或索引视图(后者not supported in MySQL)预先缓存查询。
答案 5 :(得分:0)
如果能够运行SQL Manager,您应该能够在ODBC连接上运行它,如果没有在C#中实例化该连接的方式有问题。
您可以发布您正在使用的c#代码,以便我们为您做出更好的判断答案。
答案 6 :(得分:0)
正如谎言所指出的那样,我认为他的解决方案很好
select jname
, jcode
from heardt
, judge
where heardt.jud1 = judge.jcode
但是你应该在你加入的字段中创建索引,因此结果会很快提供,所以添加
在heart(jud1)上创建索引a1; 在判断(jcode)上创建索引a2;
我认为这是更好的选择