簡體   English   中英

“ where-clause”中的未知列

[英]Unknown column in 'where-clause'

我有簡單的SQL:

SELECT *
  FROM `oc_artists`
 WHERE `oc_artists`.`artist_id`=`oc_artists_tags`.`artist_id`
   AND `oc_artists_tags`.`artist_tag` LIKE '%klass%'

當我運行它時,我得到:

1054-“ where子句”中的未知列“ oc_artists_tags.artist_id”

這是用於搜索腳本的sql。 如果查詢與oc_artists_tags匹配,我需要oc_artists的簡單返回唯一結果。 artist_tag

您還需要聯接表oc_artists_tags ,您可以通過兩種方式實現這一點,

選項1

SELECT *
  FROM `oc_artists`
  INNER JOIN `test2` on `oc_artists`.`artist_id`=`oc_artists_tags`.`artist_id`
  AND `oc_artists_tags`.`artist_tag` LIKE '%klass%'

選項2

SELECT *
  FROM `oc_artists`,`oc_artists_tags`
  WHERE `oc_artists`.`artist_id`=`oc_artists_tags`.`artist_id`
  AND `oc_artists_tags`.`artist_tag` LIKE '%klass%'

查詢中缺少第二個include oc_artists_tags表,因此在include oc_artists_tagsinclude oc_artists_tags表...

最后,您的查詢應該是-

SELECT *
  FROM `oc_artists`, `oc_artists_tags`
 WHERE `oc_artists`.`artist_id`=`oc_artists_tags`.`artist_id`
   AND `oc_artists_tags`.`artist_tag` LIKE '%klass%'

您也可以使用連接或內部連接來代替逗號連接-

SELECT *
  FROM `oc_artists` as oa
  join `oc_artists_tags` as oat on oa.artist_id=oat.artist_id 
 WHERE oat.artist_tag LIKE '%klass%';

要獲得性能,請遵循以下幾點:

  1. 您應該只選擇必填列而不是*。

  2. 連接字段必須被索引,更好的是這些字段應該是整數類型。

  3. 如果可能,請避免在like子句的左側使用'%',因為它不會使用索引並降低查詢速度。 例如,像'klass%'這樣的artist_tag將使用索引,而'%klass%'將不使用索引。

您必須加入另一個表。 加入可以幫助您。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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