加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – MS Access:WHERE-EXISTS子句不能处理视图?

发布时间:2020-12-12 06:36:43 所属栏目:MsSql教程 来源:网络整理
导读:先决条件:在MS Access 2010中,创建以下表: CREATE TABLE ATBL(ID INT);INSERT INTO ATBL(ID) VALUES (1);INSERT INTO ATBL(ID) VALUES (2);INSERT INTO ATBL(ID) VALUES (3);CREATE TABLE BTBL(ID INT);INSERT INTO BTBL(ID) VALUES (1);INSERT INTO BTBL(I
先决条件:在MS Access 2010中,创建以下表:
CREATE TABLE ATBL(ID INT);
INSERT INTO ATBL(ID) VALUES (1);
INSERT INTO ATBL(ID) VALUES (2);
INSERT INTO ATBL(ID) VALUES (3);

CREATE TABLE BTBL(ID INT);
INSERT INTO BTBL(ID) VALUES (1);
INSERT INTO BTBL(ID) VALUES (2);

还要创建一个名为BVIEW的视图,它使用以下SELECT语句:

SELECT A.ID FROM ATBL AS A WHERE A.ID = 1 OR A.ID = 2

现在BVIEW应该具有与BTBL相同的内容.然而,以下两个查询将返回不同的结果:

SELECT A.ID FROM ATBL AS A WHERE EXISTS (SELECT 1 FROM  BTBL AS B WHERE B.ID=A.ID)
SELECT A.ID FROM ATBL AS A WHERE EXISTS (SELECT 1 FROM BVIEW AS B WHERE B.ID=A.ID)

第一个查询返回两个记录(1和2),但第二个查询返回ATBL的所有记录.这有什么不对?我错过了什么吗?

解决方法

视图实际上是一个保存的SQL SELECT语句.至少,这是MS Access中保存的视图.你使用相同的内部变量A和B.恕我直言,他们正在混合.最后一行真的看起来像
SELECT A.ID FROM ATBL AS A WHERE EXISTS (SELECT 1 FROM (SELECT A.ID FROM ATBL AS A WHERE A.ID = 1 OR A.ID = 2) AS B WHERE B.ID=A.ID)

尝试更改一些内部名称,例如:

SELECT AA.ID FROM ATBL AS AA WHERE AA.ID = 1 OR AA.ID = 2

所以,最后一行看起来像

SELECT A.ID FROM ATBL AS A WHERE EXISTS (SELECT 1 FROM (SELECT AA.ID FROM ATBL AS AA WHERE AA.ID = 1 OR AA.ID = 2) AS B WHERE B.ID=A.ID)

所以,正如我们在这里看到的,MS Access甚至不知道如何隔离别名!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读