#sql
#sql
Вопрос:
В настоящее время у меня большая база данных с парой сотен тысяч строк, и я пытаюсь выполнить фильтрацию, чтобы соответствовать определенному параметру для новой таблицы.
В настоящее время у меня есть код:
SELECT sym, tstamp, COUNT(*) AS trades
FROM datas
GROUP BY sym, tstamp
HAVING COUNT(tstamp) > 300
Что дает мне отфильтрованную таблицу, которую я ищу. Однако я застрял здесь на том, как создать новую таблицу, как только я получу этот результат. Я уверен, что это довольно просто, но я застрял на нем на пару часов.
Это код, который я пытаюсь использовать:
"INSERT INTO newdb SELECT * FROM datas
WHERE sym, tstamp, COUNT(*) AS trades
FROM datas GROUP BY sym, tstamp
HAVING COUNT(tstamp) > 300"
Ответ №1:
Похоже SELECT * FROM datas
, у вас там просто есть лишний.
INSERT INTO tradecounts
SELECT
sym,
tstamp,
COUNT(*) AS trades
FROM
datas
GROUP BY
sym,
tstamp
HAVING COUNT(tstamp) > 300
Ответ №2:
Если вы хотите создать новую таблицу с помощью этого запроса, вы можете использовать CTAS
( CREATE TABLE AS SELECT
) следующим образом:
CREATE TABLE NEWDB AS
SELECT sym, tstamp, COUNT(*) AS trades
FROM datas
GROUP BY sym, tstamp
HAVING COUNT(tstamp) > 300
Ответ №3:
Используйте концепцию внешнего ключа, в которой поле первичного ключа родительской таблицы также будет сопоставляться с полем первичного ключа в дочерней таблице.Это поле первичного ключа дочерней таблицы будет внешним ключом для родительской таблицы.
например…Таблица1-Отдел, таблица 2-Сотрудник с идентификатором depid в качестве первичного ключа как таблицы, так и таблицы —
Создайте табличный отдел (первичный ключ depid varchar(10), имя varchar(50), номер зарплаты, ограничение xyz внешний ключ (depid) ссылается на отдел (depid) в каскаде удаления)
После удаления мы предоставляем режим, подобный — SET NULL, CASCADE , SET DEFAULT