【问题标题】:Unknown column in 'where-clause''where-clause' 中的未知列
【发布时间】:2016-04-15 06:24:23
【问题描述】:

我有简单的 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.artist_tag 匹配,我需要从 oc_artists 简单返回唯一结果。

【问题讨论】:

  • 你也需要加入表 oc_artists_tags。

标签: mysql sql where


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您的查询中缺少第二个连接表,因此您的连接中有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%' 这样的艺术家标签将使用索引,但 '%klass%' 不会。

    【讨论】:

    • 如果您还添加现代的、明确的 JOIN 查询版本,我会投赞成票。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-08
      • 2011-06-03
      • 1970-01-01
      • 2020-09-13
      • 2022-12-27
      • 2015-03-18
      • 2021-09-19
      相关资源
      最近更新 更多