2015-12-27 4 views
0

У меня есть 2 таблицы.Ошибка MySQL 1054 неизвестная колонка

  1. t_problem
  2. t_riesenia

В t_problem у меня есть первичный ключ id.
В t_riesenia у меня есть внешний ключ ProblemID. По крайней мере, я думаю, что у меня есть.
Я хочу, чтобы выбрать все поля из таблицы t_problem где Существует решение в t_riesenia (есть ProblemID в t_riesenia равно id в t_problem)

При попытке выполнить SQL заявление:

SELECT * FROM `t_problem` where `t_problem`.`id`=`t_riesenia`.`ProblemID` 

I получить сообщение об ошибке:

Код ошибки: 1054. Неизвестная колонка 't_riesenia.ProblemID' in 'where clause'

Почему? Смотрите скриншоты из Workbench MySQL ниже.

t_problem t_problem

t_riesenia t_riesenia

t_riesenia Внешний ключ
t_riesenia Foreign key

+1

Вы должны присоединиться таблица 't_riesenia' – ikken

ответ

3

Вы должны использовать явную join:

SELECT p.* 
FROM t_problem p JOIN 
    t_riesenia r 
     ON p.id = r.ProblemID; 

Также возможно, что вы собираетесь IN:

SELECT p.* 
FROM t_problem p 
WHERE p.id IN (SELECT r.ProblemID FROM t_riesenia r); 

Разница между ними состоит в том, как дубликаты обрабатываются в t_riesenia. Первый возвращает повторяющиеся строки. Второе - нет.

1

Этот столбец может существовать где-то в вашей базе данных, но его не существует по вашему запросу. Вы запроса определяет только одну таблицу:

SELECT * FROM `t_problem` where `t_problem`.`id`=`t_riesenia`.`ProblemID` 

Обратите внимание на пункт FROM имеет только одну таблицу. Вы можете увидеть это немного более ясно, если вы структурировать его в явном виде:

SELECT 
    * 
FROM 
    `t_problem` 
WHERE 
    `t_problem`.`id`=`t_riesenia`.`ProblemID` 

Единственная известная таблица в этом запросе t_problem. Чтобы добавить дополнительные таблицы, их необходимо добавить в пункт FROM.Нечто подобное, например:

SELECT 
    `t_problem`.* 
FROM 
    `t_problem` 
    INNER JOIN `t_riesenia` ON `t_problem`.`id` = `t_riesenia`.`ProblemID` 

(Обратите внимание, что в этом случае положение WHERE не действительно необходимо, так что сравнение будет верно для каждого присоединился запись.)

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