Mysql ошибка 1111 в одной версии запроса и ошибка 1054 в другой

0

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

  • книги: [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'

Какой правильный запрос использовать?

Edit
Ниже приведены запросы к созданию таблиц:

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;
Теги:
mysql-error-1054
mysql-error-1111

2 ответа

1

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

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

вместо

WHERE `books`.`publisher` LIKE '%print%'
AND SUM( `inventory`.`numbers_changed` ) > '0'
1

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

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

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

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

  • 0
    Итак, в вышеупомянутой настройке, если вы хотите получить названия книг с количеством акций больше 0, что вы должны сделать?
  • 0
    @Majid: мне нужно начать с того, чтобы вы обновили вопрос с помощью операторов CREATE TABLE для таблиц BOOKS и INVENTORY .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню