2013-06-20 4 views
4

Первый запрос работает:MySQL Неизвестный столбец пункта

SELECT video.seller from video; 

Второе: не

SELECT SQL_CALC_FOUND_ROWS *, 
     t.name as tname 
FROM video, type as t 
INNER JOIN user 
ON video.seller = user.id 
WHERE video.type2 = t.id 
AND thumbnail_blobKey != '' 
AND disabled = 0 
AND is_reel = 0 
AND price!= 0 
AND video.type != 4 
GROUP BY video.id 
ORDER BY video.id DESC LIMIT 0, 10 

Error : Unknown column 'video.seller' in 'on clause'

+0

У вас есть столбец «продавец» в таблице «видео»? – faffaffaff

+0

да вот почему я поставил первый запрос :) –

+2

почему вы смешиваете синтаксис JOIN? –

ответ

3

Это интересный пример. Лучше отформатирован:

SELECT SQL_CALC_FOUND_ROWS *, t.name as tname 
FROM video, type as t INNER JOIN 
    user 
    ON video.seller = user.id 
WHERE video.type2 = t.id AND 
    thumbnail_blobKey != '' AND disabled = 0 AND is_reel = 0 AND price!= 0 AND video.type != 4 
GROUP BY video.id 
ORDER BY video.id DESC 
LIMIT 0, 10 

Вопрос заключается в столбцы video не понял, в остальной части статьи, из-за ,from. Так работает запятая. Интересно, что это может быть исправлено только путем замены , с его логическим эквивалентом cross join:

SELECT SQL_CALC_FOUND_ROWS *, t.name as tname 
FROM video cross join type as t INNER JOIN 
    user 
    ON video.seller = user.id 
WHERE video.type2 = t.id AND 
    thumbnail_blobKey != '' AND disabled = 0 AND is_reel = 0 AND price!= 0 AND video.type != 4 
GROUP BY video.id 
ORDER BY video.id DESC 
LIMIT 0, 10 

Это объясняется в documentation и причина преимущество. Запятая имеет более низкий приоритет, чем cross join. Таким образом, соединения в вашем выражении оцениваются как «объединение видео (тип join user)». Поскольку второе соединение интерпретируется первым, столбцы в video не известны.

Однако, есть на самом деле присоединиться на столе, так что лучше записать в виде:

SELECT SQL_CALC_FOUND_ROWS *, t.name as tname 
FROM video join 
    type t 
    on video.type2 = t.id INNER JOIN 
    user 
    ON video.seller = user.id 
WHERE thumbnail_blobKey != '' AND disabled = 0 AND is_reel = 0 AND price!= 0 AND video.type != 4 
GROUP BY video.id 
ORDER BY video.id DESC 
LIMIT 0, 10 
+0

О, хорошо .... Довольно интересно, и это работает, конечно, спасибо! –

1

Как написано теперь вы пытаетесь присоединиться к таблицам type и user с условием это video.seller = user.id. Поскольку video.seller является нижним столбцом таблицы type или user, у вас есть ошибка.

Переход к следующему устранит эту ошибку:

SELECT SQL_CALC_FOUND_ROWS *, 
     t.name AS tname 
FROM video 
INNER JOIN USER ON video.seller = USER.id, 
             TYPE AS t 
WHERE video.type2 = t.id 
    AND thumbnail_blobKey != '' 
    AND disabled = 0 
    AND is_reel = 0 
    AND price!= 0 
    AND video.TYPE != 4 
GROUP BY video.id 
ORDER BY video.id DESC LIMIT 0, 
          10 
+0

Спасибо, meewoK, Gordon тоже исправил его. –

+0

NP, окончательное решение Gordon намного чище! –

Смежные вопросы