[英]How to change a MYSQL query from "IN" to "INNER JOIN"?
我有以下代码在 MYSQL 数据库中搜索匹配结果:
$where[] = 'p.id IN (
SELECT adcfvc.advert_id
FROM #__koparent_advert_specific_fields_values AS adcfvc
WHERE adcfvc.advert_id = p.id
AND adcfvc.field_name = ' . $db->Quote($sf_key) . '
AND ' . $db->Quote(JString::strtolower($sf_value)) . ' = adcfvc.field_value
)';
我想将上述搜索查询从使用“IN”运算符更改为“INNER JOIN”。
知道无论如何我都无法更改任何数据库结构,只需修改上面的代码即可。
我需要查看完整的查询,但我猜测它将是:
LEFT JOIN adcfvc ON adcfvc.advert_id = $table.id
其中 $table 是第一个表的表名。
只需将子查询移动到内联视图别名并加入键即可。
看来您可以消除 where 子句中的相关子查询。
SELECT ...
FROM ...
LEFT JOIN (
SELECT adcfvc.advert_id
FROM #__koparent_advert_specific_fields_values AS adcfvc
WHERE adcfvc.field_name = ' . $db->Quote($sf_key) . '
AND ' . $db->Quote(JString::strtolower($sf_value)) . ' =
adcfvc.field_value) B
on B.advert_Id = p.id
您需要发布查询的其余部分,因为未显示能够 p 。 但是你的问题很奇怪,就是为什么你有一个“in”。 我认为您只需要执行以下操作:
FROM #__koparent_advert_specific_fields_values AS adcfvc, whatever_table as p
WHERE adcfvc.advert_id = p.id
AND adcfvc.field_name = ' . $db->Quote($sf_key) . '
AND ' . $db->Quote(JString::strtolower($sf_value)) . ' = adcfvc.field_value
)';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.