3

2つのテーブルがあります。

i)order_details:

CREATE TABLE `order_details` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `content` text,
  `id_employee` INT(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `FK_id_employee` (`id_employee`),
  CONSTRAINT `FK_id_employee` FOREIGN KEY (`id_employee`) REFERENCES `employees` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;

ii)従業員:

 CREATE TABLE `employees` (   `id` INT(11) NOT NULL AUTO_INCREMENT,   `firstname` text NOT NULL,   `lastname` text NOT NULL,   `salary` FLOAT DEFAULT NULL,   PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 ;

従業員3が担当する名、姓、注文の詳細を取得したい。私はこれを使用しました:

SELECT lastname, firstname, content FROM order_details INNER JOIN employees USING (id_employee) WHERE id_employee = 3;

しかし、私はこのエラーメッセージを受け取ります:ERROR 1054 (42S22): Unknown column 'id_employee' in 'from clause'そしてそれがどこから来たのか分かりません:(

4

4 に答える 4

5

使用する場合USING、列の名前は両方のテーブルで同じである必要があります。テーブルid_employeeにがありません。employeeしたがって、代わりにこれを使用して、ON条件を使用して2つのテーブルを結合する必要があります。

SELECT e.lastname, e.firstnam, o.content 
FROM order_details o
INNER JOIN employees e
  ON  o.id_employee = e.id 
WHERE o.id_employee = 3;

MySQLドキュメントから:

USING(column_list)句は、両方のテーブルに存在する必要がある列のリストを指定します。テーブルaとbの両方に列c1、c2、およびc3が含まれている場合、次の結合は2つのテーブルの対応する列を比較します

于 2013-01-08T10:35:32.750 に答える
2

order_details列はありid_employeeますが、employeesテーブルにはありません。使用する

SELECT lastname, firstnam, content
FROM order_details od
INNER JOIN employees e on od.id_employee = e.id
WHERE od.id_employee = 3;

異なる列名で結合するため。using列名が両方のテーブルで同じである場合に使用できます。

于 2013-01-08T10:35:20.077 に答える
1

USING( id_employee )で参加していますが、これは従業員テーブルに存在しません。だからそれで従業員IDに参加する

于 2013-01-08T10:35:04.490 に答える
0

列が欠落していることが疑われる場合は、テーブルの作成時に入力した内容を確認してください

SHOW CREATE TABLE table_name

または、テーブルの列を表示するだけです

 DESC table_name

これは、このようなエラーをデバッグするときに役立ちます。

于 2013-01-08T12:27:20.353 に答える