假设我的数据库中有多个关系,例如 Store、Employee 和 Sale,并且我想用简单的二元关系连接对。我个人会使用由外键组成的自然键创建名为 Employee_Store 和 Employee_Sale 的表。
现在,我的同事坚持为多个关系创建一张表。对于上面的示例,可能有一个名为 EmployeeLinks 的表:
EmployeeLinks(
IdLink int PK,
IdEmployee int FK null,
IdStore int FK null,
IdSale int FK null,
LinkType int not null
)
Run Code Online (Sandbox Code Playgroud)
请帮助我说明为什么这不是一个好主意的充分理由。我有自己的论点,但我想将它们保密并听取您的公正意见。
编辑:
最初上表没有主键 (!)。因为外键允许为空,所以代理键是唯一的选择。
我正在尝试获得一个快速、简单的 sql 查询,以便在使用 join 时一次只更新一行。
我试过了LIMIT
,但没有成功。
询问:
UPDATE
table1
JOIN
table2 ON table2.col=table1.col
SET
table1.row1='a value'
WHERE
table1.row2 LIKE '%something%'
LIMIT 1
Run Code Online (Sandbox Code Playgroud)
信息:
错误代码:1221. UPDATE 和 LIMIT 的错误用法
我正在使用 pgAdmin 4,并且希望将查询结果下载为INSERT
语句而不是 CSV(我能找到的唯一选项)。我习惯用 MySQL Workbench 来做这件事,但也许我已经被宠坏了?
pgAdmin 4 是否可以将查询结果下载为INSERT
语句?
我应该将过滤器放在 TSQL 查询的什么位置?
SELECT a.colum FROM A
JOIN B ON A.ID = B.ID AND B.STATUS = 1
Run Code Online (Sandbox Code Playgroud)
或者
SELECT a.colum FROM A
JOIN B ON A.ID = B.ID
WHERE B.STATUS = 1
Run Code Online (Sandbox Code Playgroud)
我正在寻找性能问题或良好做法。
我有 2 个带有列名的表WHO
,我正在使用这 2 个表创建一个视图,其中FSwho.who = FStasks.who
.
如果我在FStasks
where 中输入一条新记录FStasks.who = LIZ
,但我的FSwho.who
表上没有记录,那么触发器应该插入LIZ
到我的表中。
使用下面的代码,我得到的错误是
无法绑定多部分标识符“fs_tasks.WHO”。(我也试过
inserted.who
)
我搜索了互联网,我遇到的大多数解决方案都是关于更改同一张桌子上的值。如何将值插入到完全不同的表中?
ALTER TRIGGER [dbo].[FS_TASKS_TRIG]
ON [dbo].[FS_TASKS]
AFTER INSERT,UPDATE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Action as char(1);
SET @Action = (CASE
WHEN EXISTS(SELECT * FROM INSERTED) AND EXISTS(SELECT * FROM DELETED) THEN 'U' -- Set Action to Updated.
WHEN EXISTS(SELECT * FROM INSERTED) THEN 'I' -- Set Action to Insert.
WHEN EXISTS(SELECT * …
Run Code Online (Sandbox Code Playgroud) 我正在尝试计算特定日期/时间之间当前字段和前一个字段之间差异的平均值。目前我有一个显示这个的查询,但我不确定我现在如何过滤它,以便我可以获得特定日期/时间之间“差异”列的平均值。(提前为我的 sql 技能或缺乏道歉。)
SELECT
S.Pair,
S.Date,
S.Time,
S.Bid,
S.Time,
ABS(S.Bid - T.Bid) as 'Diff'
FROM
dbo.Data as S
CROSS APPLY
(
SELECT TOP 1 T.Bid
FROM
dbo.Data as T
WHERE
T.Id > S.Id
) as T
Run Code Online (Sandbox Code Playgroud)
任何指针将不胜感激。
编辑:
我一直在做一些关于SELECT
从这个更新中删除关键字的测试:
Update #tmpDriverTime
Set WorkDay2 = (Select IsNull(Sum(PyblHrs),0)
From spr_DriverTimeEntry
Where spr_DriverTimeEntry.DrvrID = #tmpDriverTime.EmployeeNo
And Convert(Varchar(12),dtwrkd,112) = Convert(Varchar(12),@StartDate_1,112))
Run Code Online (Sandbox Code Playgroud)
从我所做的测试来看,无论是否有SELECT
关键字,都返回了相同的数据。我由我们的 DBA 运行代码以获得他删除SELECT
语句的批准,他说我不能,因为删除SELECT
语句会导致更新以不同的方式工作,但他无法阐明它的工作方式有何不同。我已经对新的进行了一些搜索,并找到了一些 MSDN 页面,他们在其中运行UPDATE FROM
没有SELECT
关键字的命令。所以现在我很困惑,我在 MSDN 上找到的测试和其他示例说我可以删除SELECT
关键字,但我的 DBA 说不。删除SELECT
关键字是否会影响UPDATE FROM
工作方式,如果会,它会如何影响它?