' - where-clause'中的未知列

时间:2016-04-15 06:24:24

标签: mysql sql where

我有简单的sql:

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

当我跑步时,我得到了:

  

1054 - 未知栏' oc_artists_tags.artist_id'在' where子句'

这是搜索脚本的sql。如果查询与oc_artists_tags匹配,我需要从oc_artists返回简单的返回唯一结果。artist_tag

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

您的查询中缺少第二个联接表,因此您的联接中的include 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%'

您也可以使用join或inner join代替逗号join -

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%'不会。

答案 2 :(得分:1)

你必须加入另一张桌子。Join可以帮助你。