簡體   English   中英

如何將 MYSQL 查詢從“IN”更改為“INNER JOIN”?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM