[英]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.