Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Обновить одно поле при изменении другого

Как автоматически обновить одно поле при изменении другого?

Требуется копировать данные поля `smsLimit` при его обновлении в smsFree (как минимум), и "как максимум" - по условию if ( `smsLimit`<> 0), и наконец "как сверх задача" - if ( `smsLimit` == 0) SET (smsFree) VALUES (100000000') else SET smsFree = smsLimit .

Как это сделать средствами MySQL?

MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CREATE TABLE IF NOT EXISTS `astSMSdevices` (
`devID` int(10) NOT NULL,
  `smsdevice` varchar(50) NOT NULL,
  `gateType` varchar(50) NOT NULL,
  `portOnGate` varchar(10) NOT NULL,
  `group` int(11) NOT NULL DEFAULT '0',
  `priorInGroup` int(11) NOT NULL DEFAULT '0',
  `smsLimit` int(10) NOT NULL DEFAULT '0',
  `smsFree` int(12) NOT NULL DEFAULT '100000000',
  `doOFFatLImit` int(11) NOT NULL DEFAULT '0',
  `newdevIDatLimit` int(11) NOT NULL DEFAULT '0',
  `timeToLimReset` timestamp NULL DEFAULT NULL,
  `isInUse` int(11) NOT NULL DEFAULT '0',
  `isLineOK` int(11) NOT NULL DEFAULT '1'
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
Ответ:
Сообщение от YuryK
1
ELSE IF NEW.smsLimit <> OLD.smsLimit THEN SET NEW.smsFree=NEW.smsLimit;
Ага! Точно! Работает как надо.
Спасибо огромное!
Вопрос: Мигрирование данных из одной таблицы в несколько

добрый день форумчане,

мне нужно из одной таблицы раскидать данные в 2 новые таблицы (см. картинку)

т.е. по сути мне нужно вставить авторов в таблицу Avtor и вновь присвоенные id вставить в новую таблицу с книгами, т.е. если бы так можно было писать, то это было бы примерно так:


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

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
DECLARE @kniga TABLE 
(
    id INT NOT NULL PRIMARY KEY IDENTITY(1,1),
    kniga VARCHAR(50),
    Avtor VARCHAR(50),
    ISBN VARCHAR(50),
    vProkate bit
);
 
DECLARE @knigaNeu TABLE 
(
    id INT,
    kniga VARCHAR(50),
    idAvtor INT,
    ISBN VARCHAR(50),
    vProkate bit 
);
 
DECLARE @autor TABLE 
(
    idAvtor INT NOT NULL PRIMARY KEY IDENTITY(1,1),
    Name VARCHAR(50)
);
 
INSERT INTO @kniga VALUES ('idiot', 'Dostoevski', '324-4002-349', 1)
INSERT INTO @kniga VALUES ('Mu-Mu', 'Turgenev', '548-566-741-1', 0)
INSERT INTO @kniga VALUES ('Voina i Mir', 'Tolstoi', '014-124-3254', 1)


SQL
1
2
3
4
5
6
7
INSERT INTO @autor
output /*k.id, k.kniga,*/ inserted.idAvtor /*, k.ISBN, k.vProkate  */ INTO @knigaNeu
SELECT k.Avtor FROM @kniga k
 
SELECT * FROM @kniga
SELECT * FROM @autor
SELECT * FROM @knigaNeu
но так нельзя
можно ли вставить данные одним запросом? Как такое сделать лучше всего??
Ответ: invm,

жаль, спасибо за ответ

Добавлено через 17 часов 36 минут
invm,

выложил вчера немного не такой пример, который бы соответствовал моим данным. для моих таблиц, к сожалению, ваш вариант решения не подошел, пришлось писать свои грабли. сделал через курсор. Применимо к вышеупомянотому примеру:

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
DECLARE @id INT
DECLARE @knigaInfo VARCHAR(50)
DECLARE @Avtor VARCHAR(50)
DECLARE @ISBN VARCHAR(50)
DECLARE @vProkate bit
DECLARE @idNEW INT
 
 
    DECLARE db_cursor CURSOR FOR  
    SELECT k.id, k.kniga, k.Avtor, k.ISBN, k.vProkate 
    FROM @kniga k
 
    OPEN db_cursor   
    FETCH NEXT FROM db_cursor INTO @id, @knigaInfo, @Avtor, @ISBN, @vProkate
 
    WHILE @@FETCH_STATUS = 0   
    BEGIN   
    
           INSERT INTO @autor VALUES (@Avtor)
            
           SET @idNEW = SCOPE_IDENTITY()
           
           INSERT INTO @knigaNeu VALUES (@id, @knigaInfo, @idNEW, @ISBN, @vProkate)
           
           FETCH NEXT FROM db_cursor INTO @id, @knigaInfo, @Avtor, @ISBN, @vProkate  
    END   
 
    CLOSE db_cursor   
    DEALLOCATE db_cursor 
 
SELECT * FROM @knigaNeu
SELECT * FROM @autor
Вопрос: Заменить значение ключа из одной таблицы именем из другой таблицы в форме

Здравствуйте!
Есть две таблицы. Одна таблица называется "Посуда" с полями "Ключ посуды" и "Наименование посуды". Эта таблица связывается с таблицей "Поставки" связью один ко многим. Таблица "Поставки" имеет поля "Свой ключ", "Ключ посуды", которое ссылается на таблицу "Посуда", "Магазин".
Теперь возникла такая задача: в обычной форме редактирования таблицы "Поставки" необходимо сделать поле со списком "Наименование посуды", которое выводила бы "Наименование посуды" из первой таблицы, а вводила бы во вторую таблицу ключи. Несколько предположений попробовал провернуть, но не получилось.
Ответ:
Сообщение от mobile
...И правильно делаете....
А то.
Твоя же Школа.
Вопрос: транспонирование наименований полей одной таблицы в столбец другой

как транспонировать наименование полей одной таблицы в один столбец другой таблицы?
Ответ: просветление пришло
select column_name from information_schema.columns where information_schema.columns.table_name='table_name';
Вопрос: Много не пересекающихся последовательности в одной таблице

Делается "multi tenancy" програма (SaaS). База MSSQL 2014.
В одной таблице будут данные многих клиентов. Данные не пересекаются.
Клиенты не должны видеть данные другого клиента.
В таблице есть поле CUSTOMER_ID идентифицировать клиента.
Клиенты порядка 1000 или несколько тысяч в будущее.
В таблице есть поле например ORDER_ID которое нужно заполнить последовательным числами.

Вопрос: как сделать последовательность чисел в ОДНОЙ таблице для каждого клиента в отделности?
Т.е. для каждго CUSTOMER_ID в отделности.

Если CUSTOMER_ID=1 използовал номера от 1 до 1000 то следующий номер для него должен быть 1001,
независимо от того что другие клиенты в течение этого времени тоже получали их номера.

Я знаю по identity и sequence, но я не знаю, как их использовать в этом случае - одна таблица.
Только возможно, использовать столко sequence сколько есть клиентов.
Возможно есть более элегантное решение?
Ответ: емил_,

существует множество складских приложений, биллинговых и нигде проблема нумерации не возникает и счета клиентов не перемешиваются, каждый видит строго свою информацию.
Вопрос: Данные из одних таблиц записать в другие таблицы

Всем привет!
Подскажите!
Есть 5 таблицы
таблица А (1,2,3,4,5,6,7)
Таблица Б (а,б,ц,д)

Нужно
В Таблицу В записать данные из А и Б
В таблицу Г записать данные из А и Б
В таблицу Д записать данные все из В,Г
______________________________________________
Таблица В (1,2,2,3,5,б,д)
Таблица Г (4,5,6,7,а,ц)

Как можно реализовать?
Вот мой приме, но чет не расчехлючь!
Oracle 11 SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
INSERT INTO А
 SELECT 1,2,2,3,5
 FROM В
 
INSERT INTO Б
 SELECT б,д
 FROM В
INSERT INTO А
 SELECT 4,5,6,7
 FROM Г
 
INSERT INTO Б
 SELECT а,ц
 FROM Г
 
INSERT INTO Б
 SELECT *
 FROM Д
Ответ: Почему в одном месте написано
Таблица Б (а,б,ц,д)
, а в другом
Таблица Б (ID,STAJ,OTDEL)
? Подозреваю, что где-то что-то пропущено или неверно
Вопрос: Как из одной таблицы вытащить данные одной колонки и проставить в другой таблице в oracle?

Мой скрипт везде проставляет одно и то же:
Oracle 11 SQL
1
2
3
4
5
6
7
UPDATE import_data SET iin=(
SELECT e.iin FROM zags_2014.existing_persons e WHERE 
e.last_name=last_name
AND e.first_name=first_name
AND e.father_name=father_name
AND ROWNUM=1 )
WHERE iin IS NULL;
Везде проставляется одно значение, а мне нужно чтобы соответствующий ИИН проставил
Ответ: Нет, никто не дергает таблицы. Точнее шяс никому пока данные оттуда не нужны, хотя доступ есть у многих людей. Выгрузим, потом зальют на другой сервак и уже оттуда начнут дергать.
Вопрос: Сортировка одной таблице на основе другой

Добрый день!

Есть таблицы:

Код
--
-- Структура таблицы `q_data`
--

CREATE TABLE IF NOT EXISTS `q_data` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` int(10) unsigned NOT NULL,
  `data` varchar(32) NOT NULL,
  UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=4 ;

--
-- Дамп данных таблицы `q_data`
--

INSERT INTO `q_data` (`id`, `user_id`, `data`) VALUES
(1, 1, 'aaa'),
(2, 1, 'bbb'),
(3, 1, 'ccc');

--
-- Структура таблицы `q_sort`
--

CREATE TABLE IF NOT EXISTS `q_sort` (
  `id` int(10) unsigned NOT NULL,
  `user_id` int(10) unsigned NOT NULL,
  `sort` int(10) unsigned NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

--
-- Дамп данных таблицы `q_sort`
--

INSERT INTO `q_sort` (`id`, `user_id`, `sort`) VALUES
(2, 1, 1),
(1, 1, 2),
(3, 1, 3);


Нужно q_data отсортировать по q_sort.sort для user_id. Делаю так:

Код
SELECT * FROM q_data AS d 
INNER JOIN q_sort AS s ON s.user_id=d.user_id 
GROUP BY d.id 
ORDER BY s.sort ASC


Но что-то результат не радует...

Код
id    user_id    data    id    user_id    sort
1    1    aaa    2    1    1
2    1    bbb    2    1    1
3    1    ccc    2    1    1


Когда жду такого:

Код
id    user_id    data    id    user_id    sort
2    1    bbb    2    1    1
1    1    aaa    2    1    2
3    1    ccc    2    1    3


Что не так делаю? :dash1 
Ответ:
Цитата(Akina @  2.6.2016,  15:55 )
без сортировки составь запрос - просто чтобы получить правильные данные, в т.ч. в поле сортировки

Без сортировки? Не совсем понял, при чем она тут. Сортировка ведь влияет лишь на порядок следования того, что уже выбрано? А если выбрано уже не то, то и сортировка непонятно каким боком, она же сам набор данных не меняет?

Вот выбираем что нам надо:

Код
SELECT * FROM w_data WHERE user_id=1 AND some_id=1


Далее джойнил таблицу для сортировки:

Код
SELECT * FROM w_data AS d INNER JOIN w_sort AS s ON s.some_id=d.some_id WHERE d.user_id=1 AND d.some_id=1


Тут мы получали пересечение всех строк... Кароче, я уже понял что тупанул с этим. Нужно было использовать все точки соприкосновения для ON... При еще пришлось на реальном запросе немного потупить - там на самом деле не 3 такие id, а 4, и нужно джойнить по всем 4 чтоб не происходило пересечения, а я чето тупанул и уперся в эту группировку, понимая что она все равно проблемы не решит.... :crazy 
Вопрос: Запрос на добавление данных в несколько таблиц

Имеются 4 связанных таблицы. Из них данные надо перевести в архив (такие же по структуре связанные таблицы).
Чтоб перебросить данные надо построить 4 запроса по добавлению в каждую таблицу, а потом макрос. который будет выполнять ети запросы?
Насколько понимаю в запросе на добавление можно только в одну таблицу закидывать данные.
Помогите пожалуста только с алгоритмом, дальше сам.
Ответ:
Сообщение от skifua
Чтоб перебросить данные надо построить 4 запроса по добавлению в каждую таблицу, а потом макрос. который будет выполнять ети запросы?
Да
Сообщение от skifua
Насколько понимаю в запросе на добавление можно только в одну таблицу закидывать данные.
Да
Сообщение от skifua
Помогите пожалуста только с алгоритмом, дальше сам.
Так, собственно, вы все уже и написали.
Главное двигаться в направлении "от 1 к много" - первыми копируются те таблицы, которые не зависят от остальных, затем те, которые зависят от уже скопированных.
Вопрос: Заполнить данными одну таблицу из двух других

Ребята помогите!

есть TABLE1(ID,DATE,NOM,TOUR)
TABLE2(DATE,OPER,ZPK)
TABLE3(ID,DATE,NAME,ZPK,TOUR,NAME)
НУЖНО В TABLE3 записать данные из TABLE1 и не достающие дописать с TABLE2 через UPDATE
Ответ:
Сообщение от Joki87
НУЖНО В TABLE3 записать данные из TABLE1
Приведи числовой пример. Что есть и что надо получить. И заодно как связаны таблицы между собой.