2016-04-15 3 views
2

У меня есть простой 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' в 'где предложение'

Это sql для скрипта поиска. Мне нужны простые возвратные уникальные результаты от oc_artists, если запрос совпадает с oc_artists_tags. artist_tag.

+1

Вы должны присоединиться к table oc_artists_tags тоже. – jarlh

ответ

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%' 

Вы можете также использовать соединение или внутреннее соединение вместо запятой сшиваемых

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. Если возможно, избегайте '%' в левой части в подобном предложении, так как он не будет использовать индекс и замедляет ваш запрос. например, artist_tag, например «klass%», будет использовать индекс, но «% klass%» не будет.

+0

Да, спасибо! Я буду отмечать как ответ –

+0

Я поднимусь, если вы также добавите современную, явную версию запроса JOIN. – jarlh

1

Вы должны присоединиться к другому столу. Join помогает.

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%' 
Смежные вопросы