請教資料庫高手,在access2019裡,用sql語句查詢實

時間 2021-10-16 11:00:39

1樓:匿名使用者

access資料庫是可以用兩個表關聯的結果來更新其中一列表的。但是由於access jet引擎功能較弱,它只能用資料表中實際存在的列的值來更新其中一張表,對於計算得來的列的列值是無法用於更新的,哪怕是事前將有查詢關語句儲存為一個固定名稱的查詢也不成。

例如 update t2 a,(select a,count(a) as cnt from t1 group by a) b

set a.c=b.cnt where b.a=a.a;

或者將其中的子查詢「select a,count(a) as cnt from t1 group by a」 儲存為查詢「q1」

上述語句改寫如下

update t2 a,q1 b set a.c=b.cnt where b.a=a.a;

上述兩句的語法都沒問題,但是無法執行(報錯必須有可更新的查詢)

這麼辦?因為cnt列是計算得來的,jet無法利用該列更新t2的欄位c,那我們就利用一張中間表t3來繞過這個限制。

先執行生成表查詢,將上述子查詢結果儲存為表「t3」

select a,count(a) as cnt into t3 from t1 group by a;

再執行下列更新即可實現樓主的需求

update t2 a,t3 b set a.c=b.cnt where b.a=a.a;

如果以後要經常執行該操作,請先執行一下面兩個動作查詢來更新之前t3表裡已有的資料,以免舊有資料影響更新查詢的正確性。

1.清空舊資料

delete from t3;

2.存入新的子查詢結果

insert into t3 select a,count(a) as cnt from t1 group by a;

3.執行更新查詢,更新t2表的c列

update t2 a,t3 b set a.c=b.cnt where b.a=a.a;

確實有些麻煩,但是目前暫時還未能找到不借助中間t3表的sql語句解決方案。

其實更新t2表的c列有些多餘,因為我們可以非常方便地用選擇查詢得到你要的列表

select a.id,a.a,nz(b.cnt,0) as c from t2 a left join

(select a,count(a) as cnt from t1 group by a) b

on b.a=a.a;

一句選擇查詢就搞定了,實在是沒必要去花大把的精力來維護這個c列!

2樓:創作者

select [t2].a,[t2].c from [t2] left join select * from (select [t1].

a, count(*) as 數量 from [t1] group by [t1].a) as [查詢1] on [t2].a=[查詢1].

a;如果你覺得寫得累,可以用很簡單的辦法解決,直接把t1按a列統計一下,然後儲存為查詢1,再把查詢1跟t2連線查詢就可以了

3樓:匿名使用者

感覺上應該是用merge語句,可是我不會用access,不知道他裡面有沒有merge語句,而且merge沒有insert我也不知道行不行,你試試吧。不行就算了。

merge into t2

using (select a,count(*) b from t1 group by a) tt

on t2.a=tt.a

when matched then

update set

t2.c=tt.b;

4樓:love灬闖天涯

用程式分別連結sqlserver2008 和 access資料庫

然後進行**進行比較。

5樓:匿名使用者

select id,t2a,count(*) as c from (

select t1.a as t1a,t2.id,t2.a as t2a from t1,t2 where t1.a=t2.a

)c就是你需要的資料

6樓:匿名使用者

你在t1表中先彙總按a列,再與t2表關係一下,選出彙總列就可以了.

sql一個表中同時查詢兩個count的sql語句

7樓:匿名使用者

可以有兩種解決方法。

方法1:

select *****name

, count (1) as 總題數

, sum (case when statu = 1 then 1 else 0 end) as 稽核題數

from question

group by *****nme

方法2:

select s.總題數, s.稽核題數, s.*****name

from (

select count(1) as 總題數, case when status = 1 then count(1) else 0 end as 稽核題數,  *****name

from question

--where *****name in (select distinct *****name from question), 這個條件可以不要了

group by *****nme, stauts -- status也要作為分組欄位,因為在case中有使用) s

8樓:微醫**網

可以有兩種解決方法,

所需工具:sql

查詢兩個count的方法1:

select *****name

, count (1) as 總題數

, sum (case when statu = 1 then 1 else 0 end) as 稽核題數

from question

group by *****nme

查詢兩個count的方法2:

select s.總題數, s.稽核題數, s.*****name

from (

select count(1) as 總題數, case when status = 1 then count(1) else 0 end as 稽核題數,  *****name

from question

--where *****name in (select distinct *****name from question), 這個條件可以不要了

group by *****nme, stauts -- status也要作為分組欄位,因為在case中有使用

) s備註:兩個都可以使用。

9樓:

用case when根據條件計數:

select s.總題數, s.稽核題數, s.*****namefrom (

select count(1) as 總題數, case when status = 1 then count(1) else 0 end as 稽核題數,  *****name

from question

--where *****name in (select distinct *****name from question), 這個條件可以不要了

group by *****nme, stauts -- status也要作為分組欄位,因為在case中有使用) s

10樓:鯨魚爸爸

除了count之外還有一個函式叫做 sum。

select *****name

, count (1) as 總題數

, sum (case when statu = 1 then 1 else 0 end) as 稽核題數

from question

group by *****nme

*****name in(select distinct *****name from question)   這個沒意義吧? 都是同一張question表,要不就是你表名寫錯了。

good luck !

在access資料庫中兩個表產生關聯怎麼寫sql語句

11樓:

在查詢設計器裡,將兩個表新增進來,點中其中一個表你要將它們關聯的欄位,拉到另一個表的相應欄位上去,然後在形成的線上雙擊,出來對話方塊,在裡面選擇關聯貫關係。

語句是:

select 表1.欄位1, 表2.欄位2 from 表1 inner join 表2 on 表1.欄位1 = 表2.欄位1

access資料庫許可權問題,ACCESS資料庫許可權問題。

這個問題很可能跟區域網的安全設定或者作業系統的保安設定有關。有些區域網不會發生這種情況,但是我碰到過的區域網大多數都有相同的問題,即access資料庫明明設定為共享,但是只要有一個使用者開啟了該資料庫其他使用者就不能開啟。其原因至今也未能查出來,找出原因者本人獎勵100分絕不食言。我有以下兩種解決辦...

access中web資料庫和資料庫有什麼區別

踏實點點 看下面的回答都應該是不如你的意,他們應該是沒有去看那個版本的新建資料庫功能。綜合得到的知識,新建web資料庫是作為共享訪問資料庫的需要,而資料庫就是普通本地開發的資料庫。開發使用安裝在伺服器上的應該都沒有限制吧 不知道你想表達的是什麼,不過他們都是資料庫的一種,只不過每中資料庫的用途和功能...

我想學資料庫哪個資料庫更好呢?Access還是SQL還是Oracle呢

對於初學者,我看還是sql吧。其實你說sql,應該叫sqlserver吧,畢竟是windows上的,安裝配置使用都好弄。oracle就比較囉嗦了。至於access,可以不用考慮。你看看sqlserver,access也就差不多了。語句差別不大。sql,是一種標準,各家公司都按照sql的標準,開發了自...