在access查询设计中,啥情况下要把查询的两个表关联起来

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在access查询设计中,啥情况下要把查询的两个表关联起来相关的知识,希望对你有一定的参考价值。

一般情况好像不用关联两个表

只要这两个表有关系就应该把这两个表关联起来。如:学生表:姓名,性别,学号,成绩。 成绩表:学号,科目,成绩。 这里都有成绩,所以要关联起来追问

是不是一个表中的主键是2个(字段)另一个表是一个字段,比如一个表示 姓名 成绩 为主键,另个表是姓名为主键 这时我要把相同的主键联系在一起 否则就没分(ps:我好晕,这是目前发现的)不知道是不是这种情况要联系查询中的两个表

追答

对对,但是不一定两个字段为主键的。如:我爱吃的食物(水果,蔬菜), 还有一个水果表(西瓜,苹果),这样,两个表还是可以建立关系的。

参考技术A 关联两个表的前提是必须要一个表中的字段是另一个表的主键或者字段,这个可以去关系里面设置,如果想直接依据两个表创建查询,那么这两个表必须是有交叉的(其实也是需要有关联的),这就是引导中可以选择的交叉表查询。

SQL Server 中这两个循环删除查询有啥区别

【中文标题】SQL Server 中这两个循环删除查询有啥区别【英文标题】:What is the difference between these 2 Looping Delete queries in SQL ServerSQL Server 中这两个循环删除查询有什么区别 【发布时间】:2020-02-02 00:08:31 【问题描述】:

我想找出在 while 循环中执行删除查询之间的区别,一个带有开始事务和一个没有。我试图从 2.5 亿行中删除 2 亿行,并在后台继续运行类似的东西。我无法截断,因为表中有外键。

这是针对 SQL Server 2012 的。我尝试了没有单词 begin transaction 和 commit transaction 的那个,它工作正常,但是一旦我将单词 begin transaction 和 commit 放入 while 循环中,表就会锁定,然后开始回滚一旦我停止在 SSMS 上执行。不使用开始交易这个词会更好吗?有什么区别。

SET NOCOUNT ON

DECLARE @Deleted_Rows INT;

SET @Deleted_Rows = 1;

WHILE @Deleted_Rows > 0

BEGIN

DELETE  TOP (4800) FROM s FROM mytable s
INNER JOIN Controltable f on s.fileid = f.fileid
where f.FileDate < GETDATE()-7

IF @@ROWCOUNT < @Deleted_Rows BREAK

    --WAITFOR DELAY '00:00:00:01';

END

SET NOCOUNT ON

DECLARE @Deleted_Rows INT;

SET @Deleted_Rows = 1;

WHILE @Deleted_Rows > 0

BEGIN
BEGIN TRANSACTION

DELETE  TOP (4800) FROM s FROM mytable s
INNER JOIN Controltable f on s.fileid = f.fileid
where f.FileDate < GETDATE()-7

IF @@ROWCOUNT < @Deleted_Rows BREAK

    --WAITFOR DELAY '00:00:00:01';
COMMIT TRANSACTION
END

我认为使用 begin 事务更安全,因为它在 while 循环内,它会每 4800 行提交一次,每当我停止执行时,它只会像 100 行或其他东西一样回滚,而是回滚所有百万行行。当我不使用提交事务和开始事务时,它工作正常并且不会回滚。只要我在 SSMS 中点击停止执行,就删除 4800 行并停止。这里发生了什么事?我错过了分号吗?查询错了吗?有没有更好的办法?

【问题讨论】:

SQL Server 支持隐式事务,这意味着每条语句在执行时都会被提交。 所以如果我不使用隐式事务,比如***查询,它不会被提交?那么当我停止执行时,更改是永久的怎么办?行被删除。 【参考方案1】:

您的提交事务在 BREAK 之后。因此,在最后一次运行时,您的 while 循环将中断,最后一个 BEGIN TRANSACTION 将没有相应的 COMMIT。

因此,您的脚本看起来好像总是会留下未处理的事务。对于最后一个被破坏的循环,您将需要在 while 循环之后进行单独的 COMMIT。

【讨论】:

啊,明白了!谢谢一堆。我需要在你说的休息前加上“承诺”

以上是关于在access查询设计中,啥情况下要把查询的两个表关联起来的主要内容,如果未能解决你的问题,请参考以下文章

如何对access中两个数据库中表进行联合查询

access查询设计运行不出来

急急急!access 数据库对两个表关联count

Access sql语句运行时显示无效的sql语句是啥原因

access中查询出来值的为空,如何将空值改为0,具体表达式是啥,从啥地方输入表达式,多谢

MS Access 表>查询>表单设计问题