AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

    • 主页
    • 系统&网络
    • Ubuntu
    • Unix
    • DBA
    • Computer
    • Coding
    • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题

问题[duplication](dba)

Martin Hope
LimetaPeta
Asked: 2022-06-09 12:17:29 +0800 CST

TVGuide 数据库循环电视节目

  • 0

我正在尝试设计 TVGuide 数据库 在此处输入图像描述

如您所见,一个电视节目可以有很多节目,而一个节目可以在多个电视节目上播放

这一切都很好

我要解决的问题是当节目在多个日期时该怎么办,例如一部电影在 2012 年 4 月 4 日在 BBC 1 上播放,然后他们现在在 2012 年 8 月 8 日再次播放我会重复日期不同的电影,是否有可能以某种方式减少这种情况,所以我会有一部有很多日期的电影,或者(一部电影也只能播放一次)类似的东西

感谢 Anwsering 和最佳问候顺便说一句:我正在使用 Toad 数据建模器 6.5 来设计这个数据库,这里是它的设计:https ://www.mediafire.com/file/lek90uvy8pz9wr8/TVGuide.txp/file

duplication
  • 1 个回答
  • 26 Views
Martin Hope
IBot
Asked: 2022-02-18 06:21:49 +0800 CST

对变量列进行更新的 UPSERT 给出错误“命令不能再次影响行”

  • 1

嘿,我正在尝试根据查询结果插入或更新(如果约束重复),这些是 create table 语句:

CREATE TABLE IF NOT EXISTS public.inventory (
  inventory_id serial PRIMARY KEY,
  arrive_date date NOT NULL,
  arrive_location character varying NOT NULL,
  thing_type integer NOT NULL,
  quantity integer NOT NULL
);

CREATE TABLE IF NOT EXISTS public.preprocess_things (
  preprocess_id serial PRIMARY KEY,
  arrive_date date NOT NULL,
  arrive_location character varying NOT NULL,
  data jsonb NOT NULL,
  CONSTRAINT preprocess_things_arrive_date_arrive_location_bo_key UNIQUE (arrive_date, arrive_location)
);

这是 upsert 查询:

WITH result_query AS (
    SELECT DATE_TRUNC('day', arrive_date) AS date,
      arrive_date,
      arrive_location,
      thing_type,
      SUM(quantity) AS total_things
    FROM inventory
    GROUP BY date, arrive_location, thing_type
)
INSERT INTO preprocess_things (
    arrive_date,
    arrive_location,
    data
  )
SELECT r.date AS arrive_date,
  r.arrive_location,
  jsonb_build_object(r.thing_type, r.total_things)
FROM result_query r
ON CONFLICT (arrive_date, arrive_location) DO
UPDATE SET data = preprocess_things.data || EXCLUDED.data

result_query 行是:

date                   | arrive_location | thing_type | thing_count
2018-05-30 00:00:00-00 | location_00     |   3        | 2
2018-05-31 00:00:00-00 | location_00     |   3        | 8
2018-05-31 00:00:00-00 | location_00     |   4        | 7

尝试插入preprocess_things,其中 data 是一种jsonb类型,预期结果是:

id | arrive_date            | arrive_location | data
1  | 2018-05-30 00:00:00-00 | location_00     | { "3": 2 }
2  | 2018-05-31 00:00:00-00 | location_00     | { "3": 8, "4": 7 }
postgresql duplication
  • 1 个回答
  • 337 Views
Martin Hope
user2494430
Asked: 2021-11-08 05:48:40 +0800 CST

删除结果集的冗余值

  • 0

使用 MySQL Workbench,我设法制作了一个创建和插入脚本(查看所有内容)。

用脚本

SELECT abbr_Company, name_Company, ddate, turnover, name_Employee
FROM Profit
INNER JOIN Employee ON Employee.idEmployee = Profit.idEmployee
INNER JOIN Company ON Profit.idCompany = Company.idCompany
ORDER BY idCodeTurnover

我可以生成下面的结果集: 结果集

问题:如何使用 SQL 操作结果集以使重复值不可见,例如具有这样的结果集: 在此处输入图像描述

创建脚本

-- -----------------------------------------------------
-- Schema playautomatedb
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS playautomatedb DEFAULT CHARACTER SET utf8 ;
USE playautomatedb ;

-- -----------------------------------------------------
-- Table playautomatedb.Company
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS playautomatedb.Company (
  idCompany SMALLINT NOT NULL,
  name_company VARCHAR(45) NOT NULL,
  abbr_company VARCHAR(3) NOT NULL,
  PRIMARY KEY (idCompany),
  UNIQUE INDEX idCompany_UNIQUE (idCompany ASC) 
  );


-- -----------------------------------------------------
-- Table playautomatedb.Employee
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS playautomatedb.Employee (
  idEmployee TINYINT NOT NULL,
  name_Employee VARCHAR(45) NOT NULL,
  abbr_Employee VARCHAR(3) NOT NULL,
  PRIMARY KEY (idEmployee),
  UNIQUE INDEX idEmployee_UNIQUE (idEmployee ASC) 
);


-- -----------------------------------------------------
-- Table playautomatedb.Automaat
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS playautomatedb.Automate (
  idAutomate SMALLINT NOT NULL,
  type_Automate VARCHAR(45) NOT NULL,
  idCompany SMALLINT NULL,
  PRIMARY KEY (idAutomate),
  UNIQUE INDEX idAutomate_UNIQUE (idAutomate),
    FOREIGN KEY (idCompany)
    REFERENCES playautomatedb.Company (idCompany)
    );


-- -----------------------------------------------------
-- Table playautomatedb.Profit
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS playautomatedb.Profit (
  idCodeTurnover INT NOT NULL,
  ddate DATE NOT NULL,
  idEmployee TINYINT NOT NULL,
  turnover INT NOT NULL,
  idCompany SMALLINT NULL,
  PRIMARY KEY (idCodeTurnover),
    FOREIGN KEY (idEmployee)
    REFERENCES playautomatedb.Employee (idEmployee),
  CONSTRAINT idCompany_UNIQUE
    FOREIGN KEY (idCompany)
    REFERENCES playautomatedb.Company (idCompany)
);

插入脚本

use playautomatedb;

-- insert Company
INSERT INTO Company (idCompany, name_Company, abbr_Company) 
VALUES 
(1, 'Coffeeshop de Engel', 'CE'),
(2, 'Snackbar Vork', 'SV'),
(3, 'Kantine BV WSE', 'WSE'),
(4, 'Zwembad de Snip', 'ZS');


-- insert Employee 
INSERT INTO Employee (idEmployee, name_Employee, abbr_Employee)
VALUES
(1, 'Jan Hein', 'JHE'),
(2, 'Klaas Jansen', 'KJA'),
(3, 'Johan Bakker', 'JBA');


-- insert Automate
INSERT INTO Automate (idAutomate, type_Automate, idCompany)
VALUES
(21, 'F1_Racer', 1),
(23, 'Mega Crusher', 1),
(34, 'Photoplay', 1),

(22, 'F1 Racer', 2),
(37, 'Mega Crusher', 2),

(35, 'Photoplay', 3),

(36, 'Mega Crusher', 4),
(18, 'F1 Racer', 4);


-- insert profit
INSERT INTO Profit (idCodeTurnover, ddate, idEmployee, turnover, idCompany)
VALUES
(1, '2011-01-11', 1, 1542, 1),
(2, '2011-02-11', 2, 1653, 1),
(3, '2011-03-11', 1, 1482, 1),
(4, '2011-04-11', 3, 2018, 1),
(5, '2011-05-11', 2, 1503, 1),

(6, '2011-05-12', 2, 2035, 2),
(7, '2011-03-01', 2, 837, 3),
(8, '2011-06-02', 2, 912, 3),
(9, '2011-09-01', 1, 799, 3),

(10, '2011-04-11', 3, 1387, 4);
mysql duplication
  • 1 个回答
  • 33 Views
Martin Hope
Hannah Vernon
Asked: 2021-05-05 11:28:01 +0800 CST

消除相交的多余行

  • 4

我有一个几何值表,其中一些行与其他行相交。

我需要一个几何与其他行重叠的行列表,但我希望列表尽可能简洁。

这是设置:

USE tempdb;
DROP TABLE IF EXISTS dbo.t;

CREATE TABLE dbo.t
(
    n varchar(100) NOT NULL
    , i geometry NOT NULL
);

INSERT INTO dbo.t (n, i)
VALUES ('poly1', geometry::STGeomFromText('POLYGON ((1 2, 1 4, 1 5, 4 6, 1 2))', 4326))
     , ('poly2', geometry::STGeomFromText('POLYGON ((1 2, 1 3, 2 5, 4 6, 1 2))', 4326))
     , ('poly3', geometry::STGeomFromText('POLYGON ((7 9, 8 7, 9 6, 7 9))', 4326))

SELECT t1.n
    , t2.n
FROM dbo.t t1
    INNER JOIN dbo.t t2 ON t1.i.STIntersects(t2.i) = 1
WHERE 
    t1.n <> t2.n;

输出如下所示:

n n
聚2 聚1
聚1 聚2

但是,为了简洁起见,我只想要一行。即因为 poly1 重叠 poly2和poly2 重叠 poly1 我得到两行返回我只想要一个,如:

n n
聚1 聚2
sql-server duplication
  • 1 个回答
  • 67 Views
Martin Hope
rubengavidia0x
Asked: 2021-04-13 01:56:53 +0800 CST

从单列中选择额外空间数据中的 DISTINCT(无重复)

  • 0

您好,我在使用此列数据时遇到问题

cities
Charlotte
Cincinnati
Cleves
Columbus
Fairfield
Fresno
Los  Angeles -- HERE IS THE PROBLEM
Los Angeles
Madison
Manhatttan  Beach
New York
Orange
Palo Alto
Phoenix
Sacramento
San Francisco
Takoma  Park -- maybe this city must have problems also
Tarrytown
Valencia
Washington

我如何过滤该值,修剪的简单方法是什么?我做了我的研究,但我发现很长的 sql 语句我不明白这是否有帮助是一个简单的错误。

这是查询:

-- 3. Write a query that will list all the cities that have customers with a heading of Cities. Only
-- list each city once (no duplicates) and sort in descending alphabetical order.

select distinct customer_city as cities
FROM customers
ORDER BY customer_city ASC

-- left Los  Angeles
sql-server duplication
  • 2 个回答
  • 767 Views
Martin Hope
PaxPrz
Asked: 2021-03-15 22:04:07 +0800 CST

Postgresql Union:不要仅基于 1 列重复

  • 0

UNION 过滤掉重复的条目,而 UNION ALL 保持重复。与这种情况类似,考虑这种反例,我想设置联合以仅检查单列重复性。

SELECT id, 1 AS category FROM users UNION SELECT id, 2 FROM users_2;

在这里,我想拒绝所有 UNION 条目id, 2并仅基于id检查重复性。

结果:

id   |   category
------------------
100  |    1
101  |    1
...  |    ...
100  |    2   # Skip this as 100 is already present
201  |    2
....

预期的:

id   | category
----------------
100  |   1
101  |   1
...  |  ...
201  |   2
postgresql duplication
  • 1 个回答
  • 290 Views
Martin Hope
gabtzi
Asked: 2021-03-12 05:30:02 +0800 CST

需要帮助构建查询以检测多列上的重复项

  • 0

我有下表

create table catalog_product_entity_varchar
(
    value_id     int auto_increment comment 'Value ID'
        primary key,
    attribute_id smallint unsigned default 0 not null comment 'Attribute ID',
    store_id     smallint unsigned default 0 not null comment 'Store ID',
    entity_id    int unsigned      default 0 not null comment 'Entity ID',
    value        varchar(255)                null comment 'Value',  
)

我想找到相同的所有 entity_idsattribute_id = 86相同store_id的位置value。

例如对于列attribute_id, store_id, entity_id,value

86, 1, 1, mypath

与

86, 1, 2, mypath

但不与

86, 2, 1, mypath

结果将是entity_id, store_id,value

任何帮助表示赞赏。

select duplication
  • 1 个回答
  • 26 Views
Martin Hope
simply_sideways
Asked: 2020-05-06 08:33:01 +0800 CST

如果预期主键的所有关联属性都相同,它仍然是真正的主键吗?

  • -2

我将从一个例子开始。如果我有一个person带有预期代理主键的表Id:

+----+--------+------------+-------------+
| 身份证 | 姓名 | 出生日期 | 社会保障号 |
+----+--------+------------+-------------+
| 1 | 约翰 | 1901-01-01 | 111-11-1111 |
| 2 | 简 | 1902-02-02 | 222-22-2222 |
| 3 | 约翰 | 1901-01-01 | 111-11-1111 |
+----+--------+------------+-------------+

注意Ids 1 & 3 具有相同的属性;他们都代表同一个人。

现在,根据我们对构成主键的理论的了解,我认为这里总结得很好:

  • 主键必须唯一标识每条记录。
  • 记录的主键值不能为空。
  • 创建记录时,主键值必须存在。
  • 主键必须保持稳定——您不能更改主键字段。
  • 主键必须紧凑并且包含尽可能少的属性。

考虑第一个项目符号,“主键必须唯一标识每条记录。 ”在我的示例中,我认为每个记录是否Id代表唯一性取决于真正应该被视为唯一的内容。不同的数据库记录?是的。另一个人(记录应该代表什么)?不。

因此,多个Ids 表示生成数据的功能相同的主题,存在于 2 条记录中。一种“二对一的身份”。我没有读过任何直接解决我的示例说明的场景的内容,因为这与什么是或不是 PK 有关。

  1. 这个例子是否违反了构成主键的理论?
    1. 如果不是,这个例子是否说明违反了任何更大的数据库架构原则,或者这个概念是否可以简化为“数据重复 - 清理它”这样简单的东西?

非常感谢。

primary-key duplication
  • 1 个回答
  • 35 Views
Martin Hope
boog
Asked: 2020-03-03 09:17:29 +0800 CST

每个不同的值仅显示 1 行

  • -1

这似乎是我经常遇到的一个问题,但我还没有弄清楚(我不是 dba)。我正在为我正在创建的报告运行查询,但是用户不希望为相同的“案例编号”显示任何重复的行。

我已经尝试过“选择不同”和“分组依据”,但都没有显示我希望它们显示的结果。

问题是报告查询的列可以有 2 个不同的可能值,我们只想显示匹配其中任何一个值的案例,但我们不想显示特定案例超过 1 次。

这是查询:

SELECT cases.casenum, 
       sp_first_party(cases.casenum), 
       cases.matcode, 
       cases.open_status, 
       cases.date_opened, 
       cases.close_date 
FROM cases, 
     insurance 
WHERE (cases.casenum = insurance.case_num) 
  AND  cases.date_opened >= :start 
  AND cases.date_opened <= :end 
  AND (    insurance.policy_type = 'Liability' 
        OR insurance.policy_type = 'SUM') 
  AND insurance.date_settled is Null  
  AND (    cases.matcode like 'GPI' 
        OR cases.matcode like 'MVA' 
        OR cases.matcode like 'S&F') 
  AND cases.close_date is not NULL  

这就是我认为的问题区域:

(insurance.policy_type = 'Liability' OR insurance.policy_type = 'SUM')

一个“案例”/“案例编号”可以有多种保险单类型……这意味着它们可以有责任或总和,或两者兼而有之。报告的输出会为出现的这些保险类型中的任何一种的每个实例显示一个新行。

我们希望每个案例仅显示一行,无论为案例分配了多少/哪些保险单类型......但仍然只显示符合该标准的案例。

我试过选择不同的,以及按cases.casenum分组,我在这里做错了什么?

感谢您的阅读!

PS-这是针对 cms 平台/应用程序的,但它在 t-sql 上运行(与 mssql 语法相同)。

这是输出示例 - 正如您在最左侧的列中看到的那样,“案例编号”列有多个相同的值。这是因为符合条件的案例编号有多个不同的 insurance.policy_type。虽然我们仍然需要按这些策略类型进行过滤,但我们不希望为每个类型看到额外的行。

输出

sybase duplication
  • 1 个回答
  • 264 Views
Martin Hope
pdwhoward
Asked: 2020-02-13 08:53:17 +0800 CST

SQLite - 删除多列中的重复项

  • 0

我有下表:

C1 | C2 | C3
-------------
A | X | 1
A | Y | 2
B | X | 3
B | Y | 4

我想对第 1 列和第 2 列进行重复数据删除,并从第 3 列中选择最大值。如果第 1 行和第 2 行在第 1 列中都有“A”,那么它们是重复的。由于第 3 行和第 4 行在第 1 列中都有“B”,因此它们是重复的。由于第 1 行和第 3 行在第 2 列中都有“X”,因此它们是重复的。最后,由于第 2 行和第 4 行在第 2 列中都有“Y”,因此它们是重复的。因此,前四行将被视为重复,结果应返回第 4 行,因为它包含第 3 列中的最大值。我无法弄清楚如何跨多列进行重复数据删除。任何意见,将不胜感激。

sqlite duplication
  • 1 个回答
  • 743 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助
subwaysurfers
my femboy roommate

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve