iT邦幫忙

0

SQL 語法 跨表查詢

  • 分享至 

  • xImage

新手學習設計中.一個觀念卡了很久,
嘗試了SQL子查詢、SQL UNION、join但試不出來自己想要的結果
閉門造車一陣子..覺得真心需要大神們幫助幫我指引一下

假設我有兩個Table

Table1學生考試
Sno | Student | examDate | Memo|
------------- | -------------
00001 | Apple | 20210701 |國英數
00001 | Apple | 20210702 |國
00001 | Apple | 20210703 |英數
00002 | Banna| 20210701| 國
00002 | Banna| 20210702| 國英
00002 | Banna| 20210703| 英
00002 | Banna| 20210704| 數
00003 | Caca| 20210701| 數

Table2學生出勤統計

Sno |Student | examDate | 缺考
------------- | -------------
00001 | Apple | 20210701 |0
00001 | Apple | 20210702 |0
00001 | Apple | 20210703 |1
00002 | Banna| 20210701| 0
00002 | Banna| 20210702| 1
00002 | Banna| 20210703| 0
00002 | Banna| 20210704| 1
00003 | Caca| 20210701| 1

我該如何在Table1學生考試
查出Table2學生出勤統計裡缺考=1的日期

期望能查出像下面這樣的結果
Sno | Student | examDate | Memo|
------------- | -------------
00001 | Apple | 20210703 |英數
00002 | Banna| 20210702| 國英
00002 | Banna| 20210704| 數
00003 | Caca| 20210701| 數

真的是頭痛希望能夠觀念更進一步
我該如何下條件才能呈現上面的結果呢?


Select Sno,examDate
from Table2學生出勤統計
where 缺考=1;
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
Kevin
iT邦新手 5 級 ‧ 2021-07-26 09:32:21
最佳解答

我用LEFT JOIN有查出你要的結果,你參考看看~

select 學生考試.Sno, 學生考試.Student, 學生考試.examDate, 學生考試.Memo
from 學生考試 
left JOIN 學生出勤統計
on 學生考試.Sno = 學生出勤統計.Sno 
and 學生考試.Student = 學生出勤統計.Student
and 學生考試.examDate = 學生出勤統計.examDate
where 學生出勤統計.缺考 = '1'

https://ithelp.ithome.com.tw/upload/images/20210726/201003903hoZ3OLvnX.png

謝謝回應 但我測試仍會取得超過4組以上資料
我是用postgresql在練習..我再研究測試一下
謝謝各位提供的參考

我好像有解惑了,大大們提供邏輯都是正確的,
是我自己對自己的測試DB產出來的結果有誤解,
讓我發現我測試DB中還有資料重複的欄位需要設定on條件 非常謝謝。

Kevin iT邦新手 5 級 ‧ 2021-07-27 08:38:31 檢舉

太棒了,加油!

1
純真的人
iT邦大師 1 級 ‧ 2021-07-25 22:58:04

兩個條件符合就可以了~

select DISTINCT a.Sno
,a.Student
,a.examDate
,a.Memo
from Table1學生考試 a
left join Table2學生出勤統計 b
on a.Sno = b.Sno 
where b.缺考 = 1
and a.examDate = b.examDate
看更多先前的回應...收起先前的回應...

不好意思我照著這條件嘗試
得到的結果卻像是學號x日期的組合超過了1x組結果
會出現像是00001其他日子也缺考的情況我好納悶><

你移動一下位置~試試@@a
SQL已更新

會不會是不同sql的關係,
我是用postgresql在練習..
再研究測試一下 謝謝回答

恩~不知道你的實際資料~只能就你提供資料做設定了~

我好像有解惑了,大大們提供邏輯都是正確的,
是我自己對自己的測試DB產出來的結果有誤解,非常謝謝。

我要發表回答

立即登入回答