我有大约 60,000 行需要将信息从 column_a 更新到 column_b。例如,60,000 名客户需要他们的到达时间来匹配他们的离开时间。我知道我可以用一行来做到这一点,它可以在更新语句中使用嵌套的 select 语句。当我尝试更新多行时,我相信我必须拥有 60,000 个唯一的密钥标识符。
这是我用来更新 1 条记录的方法,我使用的是 Oracle SQL:
UPDATE patient
SET discharge_dt = (SELECT admit_dt
FROM patient
WHERE pat_seq = 'XXXXXX')
WHERE facility_id = 'X'
AND pat_seq = 'XXXXXX'
Run Code Online (Sandbox Code Playgroud)
为令人困惑的描述道歉,我本人并不是真正的数据库管理员。
对此的任何帮助将不胜感激。
表结构
CREATE TABLE [dbo].[Order Details2](
[OrderID] [int] NOT NULL,
[ProductID] [int] NOT NULL,
[UnitPrice] [money] NOT NULL DEFAULT (0),
[Quantity] [smallint] NOT NULL DEFAULT (1),
[Discount] [real] NOT NULL DEFAULT (0),
CONSTRAINT [PK_Order_Details2] PRIMARY KEY CLUSTERED
(
[OrderID] ASC,
[ProductID] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
表值
+-------------+-----------+------------+----------+----------+
| OrderID | ProductID | UnitePrice | Quantity | Discount |
+-------------+-----------+------------+----------+----------+
| 10248 | 11 | 14 | 12 | 0 |
| 10248 …Run Code Online (Sandbox Code Playgroud) 我在加入三个表时遇到问题。当我使用相同的查询连接两个表(删除后LEFT OUTER JOIN C ON B.No = C.No)时,它运行良好。但是,当我使用三个表时它不起作用。
这是我的查询
SELECT A.Name, B.Quantity, C.Quantity
FROM A
LEFT OUTER JOIN B
ON A.ID = B.ID
LEFT OUTER JOIN C
ON B.No = C.No;
Run Code Online (Sandbox Code Playgroud) 我有一个存储过程将用于分页数据。该过程的要求之一是有一个参数将用于对两列数据进行排序,在应用row_number().
一些示例数据:
CREATE TABLE grp
(
[grp_id] uniqueidentifier primary key,
[grp_nm] varchar(5) not null,
[grp_owner] varchar(200) not null
);
INSERT INTO grp ([grp_id], [grp_nm], [grp_owner])
VALUES
('7F5F0F16-4EBE-E211-9C26-78E7D18E1E84', 'test1', 'me'),
('1F52A713-EFAC-E211-9C26-78E7D18E1E84', 'test2', 'me'),
('D123B48A-63AB-E211-9C26-78E7D18E1E84', 'test3', 'me'),
('48361F86-2BC2-E211-9C26-78E7D18E1E84', 'test4', 'me'),
('27429A57-93C1-E211-9C26-78E7D18E1E84', 'test5', 'me'),
('D5DF9F8E-EDC2-E211-9C26-78E7D18E1E84', 'test6', 'me'),
('9A07EA21-1AAD-E211-9C26-78E7D18E1E84', 'test7', 'me');
CREATE TABLE mbr
(
[grp_id] uniqueidentifier,
[mbr_id] int not null primary key,
[acct_id] varchar(7) not null,
[cst] varchar(4) null
);
INSERT INTO mbr ([grp_id], [mbr_id], [acct_id], [cst])
VALUES
('7F5F0F16-4EBE-E211-9C26-78E7D18E1E84', 10, '1', …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我有一个更改密码表单,用户可以在其中输入当前密码和新密码。然后我使用以下命令更改他们的密码:
alter user user_name identified by new_password;
Run Code Online (Sandbox Code Playgroud)
我的问题是我不知道如何检查用户在表单中输入的当前密码是否正确(因为密码是在oracle中加密的)
我该怎么做?
我几乎是数据库的新用户,所以我认为我做错了什么。
我正在学习中的模式Oracle与SQL Server. 例如,在 SQL Server 中,我创建了分配给架构的表:CREATE TABLE schema1.table1然后我能够看到所有这些表,以及分配给该数据库的用户;对于 Oracle,我认为模式是用户拥有的序列、同义词等的总和。(如果不是,请纠正我)
我想在 Oracle 中实现这一点,所以我创建了用户/模式;之后,我user1与该用户建立了联系并创建了表;后来,我连接user2并创建了与用户相关的表。
现在,当我尝试使用管理员创建更改相关user1表和user2表时,它说我没有足够的权限。
改变我正在尝试做的事情:
ALTER TABLE user1.PhoneTable
ADD (CONSTRAINT C_001 FOREIGN KEY (Status)
REFERENCES user2.ClientTable (Status) ON DELETE SET NULL);
Run Code Online (Sandbox Code Playgroud)
我创建了这些用户,因为如果我想查看与电话(user1)相关的所有表,我已连接到该用户,这应该是全部,我只想让数据库有一些订单。
管理员权限:
GRANT
CREATE SESSION,
UNLIMITED TABLESPACE,
CREATE TABLE,
DROP ANY TABLE,
CREATE CLUSTER,
CREATE SYNONYM,
CREATE PUBLIC SYNONYM,
CREATE VIEW,
CREATE SEQUENCE,
CREATE …Run Code Online (Sandbox Code Playgroud) 我想写一个带有一些固定列和动态列的选择语句。这里的动态列名称是另一个表中的行。
我试过这个,但得到错误。请告诉我我的错误在哪里
set @sql=(Select subject from tbl_subjects where C_Id=22);
SELECT
ta.rollno,
ta.StdNm,
tc.C_Name,
@sql
FROM
tbl_cmarks tm,
tbl_admission ta,
tbl_classes tc
WHERE
tm.Cid = tc.C_Id
AND ta.rollno = tm.rollno
AND tm.Cid = 22 and tm.Examid=9
Run Code Online (Sandbox Code Playgroud)
Mysql 显示:
错误代码:1242。子查询返回多于 1 行
谁能告诉我如何在mysql中做到这一点?
我正在 mysql 中生成出勤报告,通过从 3 个表中提取数据,例如从招生表中提取学生姓名和卷号,缺席表中的缺席详细信息,并且我创建了一个日历表来生成所需的输出我可以在这里生成输出我的数据库和我生成的结果。SQL小提琴
现在我想将表中出现“SUN”的任何位置显示为“S”,并且如果报告中有任何假期日期,则应将它们显示为“H”。
谁能告诉我在查询中我应该怎么做才能产生预期的结果?
我的数据:
CREATE TABLE tbl_admission
(`StudentName` varchar(5), `RollNo` int, `Class` int)
;
INSERT INTO tbl_admission
(`StudentName`, `RollNo`, `Class`)
VALUES
('Naren', 1, 22),
('Srinu', 2, 22),
('Blah', 3, 22)
;
CREATE TABLE tbl_absentees
(`Date` datetime, `Status` varchar(1), `RollNo` int, `Class` int)
;
INSERT INTO tbl_absentees
(`Date`, `Status`, `RollNo`, `Class`)
VALUES
('2013-06-01 00:00:00', 'A', 1, 22),
('2013-06-02 00:00:00', 'A', 1, 22),
('2013-06-03 00:00:00', 'A', 1, 22),
('2013-06-04 00:00:00', 'A', 1, 22),
('2013-06-05 00:00:00', 'A', 1, …Run Code Online (Sandbox Code Playgroud) 我正在生成一份报告以显示未结费用,例如哪种费用类型,该费用类型的固定金额,该费用类型支付的金额以及最终该费用类型支付的余额金额。
在这里,我从 5 个表中提取数据,例如来自 Classes 表的 Class Names、来自招生表的 Roll no & Student Name、来自 Feevars 表的 Fee Types、来自 studentfees 表的费用类型固定金额,以及最后从费用收集表中为费用类型支付的金额.
我可以通过加减运算在 select 语句中提及费用类型名称来生成部分结果。
这是完整的数据库和我的查询产生的结果。请在此演示中查看 **@我的查询,在选择语句中我手动提到了费用类型。但是我想生成结果而不将费用类型作为列名。
为此,我做了一件事,我将所有费用类型都放入了这样的 sql 变量中
set @sqlList = null;SELECT GROUP_CONCAT(concat('tsf.', Replace(FeeName,' ',''))) INTO @sqlList FROM tbl_feevars;
Run Code Online (Sandbox Code Playgroud)
这将导致所有费用类型成为单行作为列名。最后,我编写了代码来生成我所期望的输出,但是我收到了类似错误代码 1064:您的 sql 语法错误。
这是我的最终代码
请任何人告诉我,我的 sql 查询有什么错误。并建议我,如果有的话??其他方式来做这个报告。
我的表:
CREATE TABLE `tbl_admission` (
`AdmNo` varchar(50) NOT NULL,
`Grp` varchar(45) NOT NULL,
`Cls` varchar(45) NOT NULL,
`rollno` int(11) NOT NULL,
`StdNm` varchar(50)
);
CREATE TABLE `tbl_classes` ( …Run Code Online (Sandbox Code Playgroud) oracle ×4
mysql ×3
sql-server ×3
ms-access ×1
performance ×1
permissions ×1
plsql ×1
update ×1