0

私は2つのテーブルを持っています:

  • 書籍:[isbn、book_title、publisher、...]
  • 在庫:[isbn、date、num_changed]

在庫のある本のタイトルを返却したいのですが。結合(クエリ1)を試みて1054エラーが発生した後、参照をリテラル値に置き換えたところ、1111エラーが発生しました。

クエリ1:

SELECT `books`.`isbn`, `books`.`book_title`, SUM( `inventory`.`numbers_changed` ) AS `num`
FROM `books`
INNER JOIN `inventory` ON `books`.`isbn` = `inventory`.`isbn`
WHERE `books`.`publisher` LIKE '%pint%'
AND `num` > '0'

クエリ2:

SELECT `books`.`isbn`, `books`.`book_title`, SUM( `inventory`.`numbers_changed` )
FROM `books`
INNER JOIN `inventory` ON `books`.`isbn` = `inventory`.`isbn`
WHERE `books`.`publisher` LIKE '%print%'
AND SUM( `inventory`.`numbers_changed` ) > '0'

使用する正しいクエリは何ですか?

編集
テーブルの作成クエリは次のとおりです。

CREATE TABLE IF NOT EXISTS `books` (
  `isbn` varchar(30) CHARACTER SET ascii NOT NULL,
  `book_title` varchar(255) CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL,
  `date_published` varchar(10) CHARACTER SET ascii NOT NULL,
  `author` varchar(40) CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL,
  `translator` varchar(40) CHARACTER SET utf8 COLLATE utf8_persian_ci DEFAULT NULL,
  `publisher` varchar(50) CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL,
  `ganre` varchar(50) CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL,
  `price` int(7) unsigned NOT NULL,
  `cover_pic` int(1) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`isbn`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `inventory` (
  `isbn` varchar(30) CHARACTER SET ascii NOT NULL,
  `date` varchar(10) CHARACTER SET ascii NOT NULL,
  `numbers_changed` int(5) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
4

2 に答える 2

1

2 番目の where 引数に使用する

WHERE `books`.`publisher` LIKE '%print%' 
HAVING ( COUNT(`inventory`.`numbers_changed`)  > '0')

それ以外の

WHERE `books`.`publisher` LIKE '%print%'
AND SUM( `inventory`.`numbers_changed` ) > '0'
于 2011-12-19T12:05:26.247 に答える
1

1054 エラーは、存在しない列の参照に関するものです。実際のエラー メッセージは、問題の原因を知るのに役立ちます。

1111 エラーは、WHERE 句で集計関数 (この場合は SUM) を使用しようとしているためです。

WHERE ...
  AND SUM( `inventory`.`numbers_changed` ) > '0'  
      ^
      |__ see this?

...サブクエリの外。SQL ステートメントは下から上にチェックされるため、WHERE 句の SUM を削除すると、1054 エラーがまだ解決されていないことが示されると思います。

于 2010-09-21T01:58:38.673 に答える