'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 - Unknown column 'oc_artists_tags.artist_id' in 'where clause'

这是一个 sql 搜索脚本。如果查询与 oc_artists_tags.artist_tag.

匹配,我需要来自 oc_artists 的简单 return 唯一结果

您的查询中缺少第 2 个连接 table,因此您的连接中 include oc_artists_tags table...

最后你的查询应该是-

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. 您应该 select 只需要列而不是 *.

  2. join字段必须有索引,最好是整数类型。

  3. 如果可能,请避免在 like 子句的左侧使用“%”,因为它不会使用索引并减慢您的查询速度。例如 artist_tag 像 'klass%' 将使用索引但 '%klass%' 不会。

你必须加入另一个 table。Join 帮助你。

你也需要加入 table 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%'