mysql多表的查詢問題

2025-01-26 17:20:12 字數 1690 閱讀 5350

1樓:網友

select aa.*,bb.*,cc.*from selected_course aa, compulsorycourse bb, selected_course cc

where = 1'

and = 左連線標識。

and =這樣子就可以了。不用寫 left join,太麻煩了。

2樓:小葉

我把你的表給命名 selected_course a表 compulsorycourse b表 takecourse c表。

select * from a join b on = join c on where

注意欄位不要寫錯。

mysql多表聯合查詢速度的問題

3樓:愛可生雲資料庫

問題我們有乙個 sql,用於找到沒有主鍵 / 唯一鍵的表,但是在 mysql 上執行特別慢,怎麼辦?

實驗我們搭建乙個 mysql 的環境,此處省略搭建步驟。

寫個簡單的指令碼,製造一批帶主鍵和不帶主鍵的表:

執行一下指令碼:

現在執行以下 sql 看看效果:

執行了 ,感覺是非常慢了。

現在用一下 dba 三板斧,看看執行計劃:

感覺有點慘,由於 information_ 是後設資料表,沒有必要的統計資訊。

那我們來 show warnings 看看 mysql 改寫後的 sql:

我們格式化一下 sql:

可以看到 mysql 將。

select from a where not in (select x from b) //非關聯子查詢。

轉換成了。select from a where not exists (select 1 from b where = //關聯子查詢。

如果我們自己是 mysql,在執行非關聯子查詢時,可以使用很簡單的策略:

select from a where not in (select x from b where ..//非關聯子查詢:1.

掃瞄 b 表中的所有記錄,找到滿足條件的記錄,存放在臨時表 c 中,建好索引2. 掃瞄 a 表中的記錄,與臨時表 c 中的記錄進行比對,直接在索引裡比對,而關聯子查詢就需要迴圈迭代:

select from a where not exists (select 1 from b where = and ..//關聯子查詢掃瞄 a 表的每一條記錄 ra: 掃瞄 b 表,找到其中的第一條滿足 ra 條件的記錄。

顯然,關聯子查詢的掃瞄成本會高於非關聯子查詢。

我們希望 mysql 能先"快取"子查詢的結果(快取這一步叫物化,materialization),但mysql 認為不快取更快,我們就需要給予 mysql 一定指導。

可以看到執行時間變成了 。

1. 對於 information_schema 中的後設資料表,執行計劃不能提供有效資訊。

2. 通過檢視 mysql 改寫後的 sql,我們猜測了優化器發生了誤判。

3. 我們增加了 hint,指導 mysql 正確進行優化判斷。

但目前我們的實驗僅限於猜測,猜中了萬事大吉,猜不中就無法做出好的診斷。

4樓:網友

你這樣做效率確實很低。最好不要取所有欄位,你要根據你的具體需求來做。

你聯合查詢想要得到的結果是什麼? 是從a表中找出不包含在的資料麼?

SQL關於時間的查詢問題

既然資料庫存的格式是 那為什麼要用不完整格式來查詢?這樣不就不準確了嗎?如果一定要不完整格式的話可以這樣 我用select from table where date like riqi 查詢不出來 因為like是對字串來說的,可以先轉換格式,把date轉換成char select from ta...

求助 mysql的多表關聯更新

mysql多表關聯更新問題 按照描述這麼寫 update 表名 t setselect name from 表名 twhere and is not null and rownum where is null mysql兩個表關聯更新問題?我好像昨天過,你不相信可以上機測試 update 表 set...

mysql語句的問題

select 是查詢 s.是所有含s表內的欄目名,這裡的s即sessions sessions s 和forums f 的意思是這兩個表的名暫時用s 和f來代表,後面的 s.fid即代表 sessions表內的 fid欄目 left join是把兩個表連合起來查詢 where 是條件設定,where...