Mysql ошибка 1111 в одной версии запроса и ошибка 1054 в другой - PullRequest
0 голосов
/ 21 сентября 2010

У меня есть две таблицы:

  • книги: [isbn, book_title, издатель, ...]
  • инвентарь: [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;

Ответы [ 2 ]

1 голос
/ 19 декабря 2011

использовать для второй где аргумент

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

вместо

WHERE `books`.`publisher` LIKE '%print%'
AND SUM( `inventory`.`numbers_changed` ) > '0'
1 голос
/ 21 сентября 2010

Ошибка 1054 связана со ссылкой на несуществующий столбец.Фактическое сообщение об ошибке поможет узнать, что является причиной проблемы.

Ошибка 1111 связана с тем, что вы пытаетесь использовать статистическую функцию (в данном случае SUM) в предложении WHERE:

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

... вне подзапроса.Операторы SQL проверяются снизу вверх, поэтому я ожидаю, что удаление SUM в предложении WHERE покажет, что ошибка 1054 по-прежнему не устранена.

...