← All posts tagged SQL

DespicableMe

Народ! Имею вопрос: представим ситуацию, когда есть некая бд, данные в которой обновляются. Но не просто так, а посуточно. И не кем-то, не по событию, а просто по времени.
Вот было сегодня в некой записи 500, к вечеру стало 0, или 124. А завтра, автоматом, опять должно стать 500. Так вот вопрос: можно ли это сделать средствами самой бд, или надо сделать некоторый костыль, который будет обновлять эти данные?

DespicableMe

Товарищи!
Если Вам не сложно, то дайте, пожалуйста, направление :-) Хотел спросить, но особо не у кого.
Суть вопроса вот в чём: есть некоторая БД. Количество таблиц в ней может изменяться в зависимости от необходимости и требований того, кто ею пользуется. То есть, в моём случае, у меня практически всегда, к примеру, усть таблица idx245a, но в ином случае может потребоваться таблица idx246 или 246a, idx241 и так далее. Таких таблиц может быть до двух тысяч и их наличие или отсутствие в БД не обязательно для разных людей, как я говорил выше.
Так вот, каким способом решаются такие проблемы в java? Как мне написать свой код так, чтобы можно было не описывая всех таблиц (я сейчас пытаюсь изучить ormlite), в будущем с ними работать, если это будет необходимо?

DespicableMe

ЧЯДНТ?
ERROR: Error executing 'CREATE  TABLE IF NOT EXISTS `mainSQL`.`BOOKSTATES` (
      `IDBS` INT NOT NULL AUTO_INCREMENT ,
      `RDR_ID` VARCHAR(128) NULL ,
      `INV_ID` INT NULL ,
      `DOC_ID` INT NULL ,
      `STATE` INT NULL ,
      `IDP` INT NULL ,
      `CHSDATE` DOUBLE NULL ,
      `RETDATE` DOUBLE NULL ,
      `FLAGS` VARCHAR(64) NULL ,
      `IDS` INT NULL ,
      `upsize_ts` TIMESTAMP(0) NULL ,
      PRIMARY KEY (`IDBS`) ,
      INDEX `Rel_8A9BD279_80FB_450A` (`IDP` ASC) ,
      CONSTRAINT `BOOKSTATES_FK00`
        FOREIGN KEY (`IDP` )
        REFERENCES `mainSQL`.`BOOKPOINTS` (`IDP` )
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    COLLATE = utf8_general_ci'
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(0) NULL ,
      PRIMARY KEY (`IDBS`) ,
      INDEX `Rel_8A9BD279_80FB_450A` (`IDP` ASC)' at line 12.
    SQL Error: 1064

DespicableMe

ERROR: Error executing 'CREATE  TABLE IF NOT EXISTS `mainSQL`.`BOOKSTATES` (
      `IDBS` INT NOT NULL AUTO_INCREMENT ,
      `RDR_ID` VARCHAR(128) NULL ,
      `INV_ID` INT NULL ,
      `DOC_ID` INT NULL ,
      `STATE` INT NULL ,
      `IDP` INT NULL ,
      `CHSDATE` DOUBLE NULL ,
      `RETDATE` DOUBLE NULL ,
      `FLAGS` VARCHAR(64) NULL ,
      `IDS` INT NULL ,
      `upsize_ts` TIMESTAMP(0) NULL ,
      PRIMARY KEY (`IDBS`) ,
      INDEX `Rel_8A9BD279_80FB_450A` (`IDP` ASC) ,
      CONSTRAINT `BOOKSTATES_FK00`
        FOREIGN KEY (`IDP` )
        REFERENCES `mainSQL`.`BOOKPOINTS` (`IDP` )
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    COLLATE = utf8_general_ci'
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(0) NULL ,
      PRIMARY KEY (`IDBS`) ,
      INDEX `Rel_8A9BD279_80FB_450A` (`IDP` ASC)' at line 12.
    SQL Error: 1064

DespicableMe

Народ, может поможете? Может кто-то сталкивался с таким?
Суть проблемы такова: когда-то давно (в 2009) некий хакер "восстановил" 700 записей БД. Каким образом он это сделал и сделал ли вообще - не ясно. Кто он и откуда - загадка. Но, с тех пор счётчик записей БД показывает неверные цифры. Они сильно меньше.
Как мне найти различия в структуре данных? Хотя, по идее, всё верно и всё на месте. Уточню, что была БД access, недавно я её перенёс на MS SQL.
Возможно, что различий в структуре нет.
Я уже пробовал найти пустые записи. Но ответ был отрицательным. Их нет.
Я пробовал найти одинаковые записи и в предыдущем своём посте написал запрос. Ответ отрицательный.
Возможно, что он заполнил таблицу случайными данными. Тогда найти их получается никак. Но это едва ли могло сказаться на счётчиках.
Я сейчас посмотрю ещё на запросы, которые использует программа, но едва ли что-то полезное там есть.

DespicableMe

Может я делаю что-то не так? Решил запустить простенький скрипт для поиска одинаковых записей в БД. Может я зря жду? Оно уже работает так минут пять.
SELECT * FROM doc d1
WHERE 1<
(SELECT count(*)
FROM doc d2
WHERE d1.item like d2.item)

DespicableMe

SELECT MAX(doc_id)
FROM doc AS T1
WHERE doc.item = T1.item
GROUP BY doc_id
ЧЯДНТ?
Всё это делалось как тестовый запрос, чтобы удалить дублирующие записи. Предыдущий админ сделал так, что в таблицу попали дублирующие записи с новыми id. Мне нужно их вычистить. Но сейчас я даже выборку сделать не могу нормальную.
Если спросите чем руководствовался, когда запрос писал, то http://www.sql-ex.ru/help/select17.php?Lang=0
Принцип тот же. Я хотел сделать выборку, не создавая никаких вспомогательных таблиц и удалить дубликаты.
Any ideas?

DespicableMe

Вопрос:
UPDATE SIGLAS SET t090f = 'оли' WHERE ID = 7
Перед этим было получено после select * from SIGLAS where 1=1
ID,SHORTNAME,STORAGE,ACCLEVEL
1,*,,
4,кх,,
5,мбо,,
6,нмо,0,
7,ои,0,
8,ооп,0,
9,оод,0,
11,дир,0,
13,ппо,0,
14,зам.дир,0,0
15,эчз,0,0
OK
А сейчас оно чего-то спршивает. Говорит, что не хватает одного параметра. Ругается матом 07002. Чего оно на самом деле хочет?

DespicableMe

Народ, жуть нужна помощь, а то спать не буду. Мне надо:
Схема БД состоит из четырех таблиц:
Product(maker, model, type)
PC(code, model, speed, ram, hd, cd, price)
Laptop(code, model, speed, ram, hd, price, screen)
Printer(code, model, color, type, price)
Таблица Product представляет производителя (maker), номер модели (model) и тип ('PC' — ПК, 'Laptop' — ПК-блокнот или 'Printer' — принтер). Предполагается, что номера моделей в таблице Product уникальны для всех производителей и типов продуктов. В таблице PC для каждого ПК, однозначно определяемого уникальным кодом – code, указаны модель – model (внешний ключ к таблице Product), скорость — speed (процессора в мегагерцах), объем памяти — ram (в мегабайтах), размер диска — hd (в гигабайтах), скорость считывающего устройства — cd (например, '4x') и цена — price. Таблица Laptop аналогична таблице РС за исключением того, что вместо скорости CD содержит размер экрана -screen (в дюймах). В таблице Printer для каждой модели принтера указывается, является ли он цветным — color ('y', если цветной), тип принтера — type (лазерный – 'Laser', струйный – 'Jet' или матричный – 'Matrix') и цена — price.
Задание 1: Найти производителей, которые выпускают более одной модели, при этом все выпускаемые производителем модели являются продуктами одного типа.
Вывести: maker, type
Задание 2:
Удалить все блокноты, выпускаемые производителями, которые не выпускают принтеры.

Помогите, а то туплю ужасно :(

DespicableMe
SQL

Гавно этот ваш MySQL. Синтаксис не очевиден, предсказать как оно будет работать нельзя. Я с ума наверное сойду, прежде чем получу своё "отлично".
Хотя, наверное, это дурацкая привычка от Oracle осталась. Там немного другой синтаксис запросов, чуть отличный от MySQL.
А ещё тупее то, что нужно писать запросы на бумажке при сдаче. Как тут проверить?