MySQL中2個表的查詢結果疑問

時間 2021-10-28 23:49:15

1樓:

關鍵:我理解的SQL有乙個很重要的一點,是找出不同表的關係,及它們之間的連線路徑。你提供的兩張表你自己應該明確知道,student表中的ID對應的是score表中的ID,如果你能明確這點在SQL語言的中的意義就好寫了。

關於你的題,自己想下簡單關係,然後寫成SQL:

兩個表靠ID進行關聯,關係是student-->score為1:N

兩個表你都有要獲取的字段

SQL 語句:

selectst.

id,sc.

id,sc.

course,sc

.score

from

student

stjoin

score

sconst.

id=sc.

idwherest.

name

="cyh"

這段SQL的幾點小建議(我的個人習慣哈):

資料表要帶庫名,比如student更應該寫成db.student,避免在不同庫下執行出錯

使用別名,獲取表的字段前帶著別名,避免重複字段衝突,也更清晰

join寫全,不要用逗號來替代join,可讀性不好

用on來表示兩表之間的連線關係,雖然放在where條件中也可以,但這樣可讀性更好,也便於以後遇到left/right join時增加條件在on後面方便。

關於你的解決方案:

第1種:

你的SQL表達的意思是,先從student表中取出id,然後根據id從score表中取出對應id資料,這是一種過程化的思維,更適用於程式開發,寫SQL要多用集合思維,想想把每個表看做集合,然後用乙個字段關聯起來,獲得乙個總體集合之後,再通過where條件進行篩選。

所以,你的第一種方案,只能取到score表的資料,是取不到想要的名字的。

第2,3種:

這兩種犯的是同乙個錯誤,就是你join了student和score兩張表,但是他們之間卻沒有連線關係。以第二種為列,你把你的SQL轉成自然語言來讀就是「從student中取出名字為chy的id,然後在student和score笛卡爾積集合中,選取出score.id等於chy的id的結果。

」,由於兩表之間沒有join條件所以會做笛卡爾積,如果不懂可以去google下哈。

tip:笛卡爾積是形成慢SQL的重要原因,平時多理解對以後會很有幫助的

2樓:史秀全

select a.id,a.name,b.course,b.score from student a

inner join score b on a.id=b.id

where id='2'

3樓:chen

輸出結果是cyh的三門課程的成績

student 和 score 表關聯一下就好了

select id,name,course,score from score s,student t where s.id = t.id and s.id = 2;

通過mysql做乙個家族關係的表(id,pid,name),通過乙個id怎麼判斷是否某個節點的子節點?

Kaciras 如果你的表一定要是 id,pid,name 這種結構,那只能遞迴。如果你可以自定義表結構那還有以下選擇 如果只有判斷後代這乙個需求,那就使用並查集。如果還有其它查詢需求,比如查x是y的第幾代啊 x到y之間的所有節點啊,可以參考我做過的乙個類似的功能 在資料庫中儲存一棵樹,實現無限級分...

Python2 中如何將乙個結果中的Unicode編碼轉換為中文?

首先 其實我沒太看懂你的dict1為什麼能decode?你是直接賦值了字串還是json.dumps 解決辦法的話看下面 單獨轉換 u73bb u7483 格式的編碼並不難 string u73bb u7483 print string.decode unicode escape 如果你的dict1已...

關於機器學習中L2範數作為正則化損失的疑問? 有關強凸strong convexity

大野人007 如果原問題僅僅是凸的而不是強凸,試想加上L2 norm是不是把原問題變為了強凸?而求解強凸問題和廣義凸的問題,是不是求解強凸的擁有更快的收斂率?是不是也就加速了呢?至於第二個問題,如果你的L2 norm前面的引數lambda是不變的,那可能確實會有偏移,但如果lambda隨著迭代而變化...