請教資料庫高手,在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資料庫Visual FoxPro資料庫程式有什麼區別?謝謝了啊

以下都是個人理解 這兩個資料庫都是桌面級資料庫。不能很好的提供瞬時併發的大資料量操作。不能很好的提供資料碎片整理以及資料壓縮操作。總之合適中小型的資料應用。access屬於檔案型資料庫和關係行資料庫之間結合2者的優點。由ado,odbc或ms access mdb 提供的資料庫驅動進行操作,入連線,...

excel匯入access資料庫

1.啟動access,新建一資料庫檔案。2.在 表 選項中,執行 檔案 獲取外部資料 匯入 命令,開啟 匯入 對話方塊。3.按 檔案型別 右側的下拉按鈕,選中 microsoft excel xls 選項,再定位到需要轉換的工作簿檔案所在的資料夾,選中相應的工作簿,按下 匯入 按鈕,進入 匯入資料表...

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

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