Учитывая запрос:
SELECT DISTINCT score.* FROM score LEFT OUTER JOIN tag ON (tag.id_score = score.id) INNER JOIN score AS score_1 USING (id) WHERE (score.song_name LIKE '%[Upload]%' OR score.artist_name LIKE '%[Upload]%' OR score.creator_name LIKE '%[Upload]%' OR tag.name LIKE '%[Upload]%') AND (score_1.song_name LIKE '%[Check OK]%' OR score_1.artist_name LIKE '%[Check OK]%' OR score_1.creator_name LIKE '%[Check OK]%' OR tag.name LIKE '%[Check OK]%')
Я получаю Column 'id' in from clause is ambiguous
в MySQL 5.1.37. Обычно люди исправляют это, добавляя явную таблицу перед их неоднозначными столбцами, но здесь я уже сделал это: (tag.id_score = score.id)
. Выход из LEFT OUTER JOIN tag
устраняет проблему, но не позволяет выполнять поиск в таблице тегов.
Является ли это ошибкой в MySQL или я что-то пропустил?
Не поможет ли это, если вы измените
INNER JOIN score AS score_1 USING (id)
к
INNER JOIN score AS score_1 (score_1.id_score = score.id)
В этом случае я успешно использовал подзапросы:
SELECT * FROM ( SELECT DISTINCT score.* FROM score LEFT OUTER JOIN tag ON (tag.id_score = score.id) WHERE (score.song_name LIKE '%[Upload]%' OR score.artist_name LIKE '%[Upload]%' OR score.creator_name LIKE '%[Upload]%' OR tag.name LIKE '%[Upload]%') ) AS score_0 INNER JOIN ( SELECT DISTINCT score.* FROM score LEFT OUTER JOIN tag ON (tag.id_score = score.id) WHERE (score.song_name LIKE '%[Check OK]%' OR score.artist_name LIKE '%[Check OK]%' OR score.creator_name LIKE '%[Check OK]%' OR tag.name LIKE '%[Check OK]%') ) AS score_1 USING (id)