最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL如何根據(jù)不同條件聯(lián)查不同表的數(shù)據(jù)if/case

 更新時間:2023年05月31日 10:17:56   作者:Coo~  
這篇文章主要介紹了MySQL如何根據(jù)不同條件聯(lián)查不同表的數(shù)據(jù)if/case問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

MySQL根據(jù)不同條件聯(lián)查不同表的數(shù)據(jù)

項目開發(fā)中遇到類似的需求。Mybatis 中的< if >標(biāo)簽只能判斷where部分,不能滿足要求。

在網(wǎng)上查解決方法,好像并沒有可以完美解決問題的方案,if和case可以從某一種角度實現(xiàn)效果。

if

MySQL中if的用法

IF(expr1,expr2,expr3)

類似三元運算符,判斷expr1,如果 expr1 是TRUE,則該語句的返回值為expr2; 否則返回值為 expr3。

SELECT product_id, 
IF(product_type_id=1, (SELECT COUNT(*) FROM `device` WHERE product_id = product.product_id),
					  (SELECT COUNT(*) FROM `monitor`WHERE product_id = product.product_id)) as device_num
FROM `product`
WHERE product_id in (1,25)

查product_id為(1,25)兩產(chǎn)品的設(shè)備數(shù)。

product表中字段product_type_id表示產(chǎn)品類型。

如果是1就查device表,否則就查monitor表。

case

多于兩種情況時 

case的用法

CASE expr1 WHEN a THEN A WHEN … THEN … ELSE … END

判斷expr1,滿足不同條件時執(zhí)行不同的語句。

注:最后以END結(jié)尾

SELECT product_id,
CASE product_type_id 
WHEN 1 THEN (SELECT COUNT(*) FROM `device` WHERE product_id = product.product_id)
WHEN 2 THEN (SELECT COUNT(*) FROM `monitor`WHERE product_id = product.product_id)
	   ELSE (SELECT COUNT(*) FROM `other_device`WHERE product_id = product.product_id) END as device_num
FROM `product`
WHERE product_id in (1,11,25)

注意

這樣能勉強實現(xiàn)效果,但并不是想象的那種。

話說,這種情況是不是應(yīng)該先查出共同的部分,再在service層進行判斷,執(zhí)行不同的語句。。

MySQL兩表聯(lián)查,根據(jù)不同條件獲得不同數(shù)據(jù)

場景:

查找某張表中某一列的所有符合某種條件的條目的累加和,且該表和另一張表相關(guān)聯(lián)

查詢語句

select DISTINCT ??
ifnull((select sum(‘列名') from a, b where a.id = b.id and a.condition=condition1 and b.condition = condition2),0) as '條件1下的數(shù)據(jù)' ,
ifnull((select sum(‘列名') from a, b where a.id = b.id and a.condition=condition3 and b.condition = condition4),0) as '條件2下的數(shù)據(jù)'
from a, b where a.id = b.id?

缺點:數(shù)據(jù)量一太大就會be崩潰

優(yōu)化后語句

select ‘別名1', ‘別名2'
from?
(select IFNULL(sum(‘列名'),0) ‘別名1' from a, b where a.id = b.id and a.condition=condition1 and b.condition = condition2),0) t1
left join?
(select IFNULL(sum(‘列名'),0) ‘別名2' from a, b where a.id = b.id and a.condition=condition3 and b.condition = condition4) t2 on 1=1

left join查詢比select嵌套查詢效率高的原因:執(zhí)行子查詢時,MYSQL需要創(chuàng)建臨時表,查詢完畢后再刪除這些臨時表,所以,子查詢的速度會受到一定的影響,這里多了一個創(chuàng)建和銷毀臨時表的過程。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • mysql中的limit用法有哪些(推薦)

    mysql中的limit用法有哪些(推薦)

    在我們使用查詢語句的時候,經(jīng)常要返回前幾條或者中間某幾行數(shù)據(jù),這個時候怎么辦呢,mysql已經(jīng)為我們提供了這樣一個功能,盡管語法邏輯很是怪異,這個功能就好比oracle里的rownum,但比mysql提供的這個LIMIT好用、好記和好理解多了,具體內(nèi)容一起通過本文看看吧
    2017-10-10
  • mysql導(dǎo)入sql文件常用的方法及適用場景

    mysql導(dǎo)入sql文件常用的方法及適用場景

    在日常學(xué)習(xí)和工作,難免不了使用Mysql數(shù)據(jù)庫,有時候需要導(dǎo)入導(dǎo)出數(shù)據(jù)庫,或者其中的數(shù)據(jù)表,這篇文章主要介紹了mysql導(dǎo)入sql文件常用的方法及適用場景,需要的朋友可以參考下
    2025-08-08
  • Node-Red實現(xiàn)MySQL數(shù)據(jù)庫連接的方法

    Node-Red實現(xiàn)MySQL數(shù)據(jù)庫連接的方法

    這篇文章主要介紹了Node-Red實現(xiàn)MySQL數(shù)據(jù)庫連接的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • linux系統(tǒng)中mysql數(shù)據(jù)庫的導(dǎo)入和導(dǎo)出

    linux系統(tǒng)中mysql數(shù)據(jù)庫的導(dǎo)入和導(dǎo)出

    本文給大家簡單記錄了一下在linux系統(tǒng)中mysql數(shù)據(jù)庫的導(dǎo)入和導(dǎo)出的方法,有相同需求的小伙伴可以參考下
    2016-02-02
  • mysqld-nt: Out of memory (Needed 1677720 bytes)解決方法

    mysqld-nt: Out of memory (Needed 1677720 bytes)解決方法

    這篇文章主要介紹了mysqld-nt: Out of memory (Needed 1677720 bytes)解決方法,需要的朋友可以參考下
    2014-12-12
  • MySQL內(nèi)連接和外連接及七種SQL?JOINS的實現(xiàn)

    MySQL內(nèi)連接和外連接及七種SQL?JOINS的實現(xiàn)

    這篇文章主要介紹了Mysql內(nèi)連接和外連接的區(qū)別以及七種SQL?Joins的實現(xiàn),相信看完這篇文章你對SQL內(nèi)外連接的多表查詢就足夠理解了,需要的朋友可以參考下
    2023-03-03
  • PostgreSQL 正則表達(dá)式 常用函數(shù)的總結(jié)

    PostgreSQL 正則表達(dá)式 常用函數(shù)的總結(jié)

    這篇文章主要介紹了PostgreSQL 正則表達(dá)式 常用函數(shù)的總結(jié)的相關(guān)資料,對那些需要進行復(fù)雜數(shù)據(jù)處理的程序來說,正則表達(dá)式無疑是一個非常有用的工具,這里就介紹下如何使用,需要的朋友可以參考下
    2017-08-08
  • MySQL中REPLACE INTO和INSERT INTO的區(qū)別分析

    MySQL中REPLACE INTO和INSERT INTO的區(qū)別分析

    REPLACE的運行與INSERT很相似。只有一點例外,假如表中的一個舊記錄與一個用于PRIMARY KEY或一個UNIQUE索引的新記錄具有相同的值,則在新記錄被插入之前,舊記錄被刪除。
    2011-07-07
  • MySQL數(shù)據(jù)庫忽略大小寫的配置方法

    MySQL數(shù)據(jù)庫忽略大小寫的配置方法

    這篇文章主要給大家介紹了MySQL數(shù)據(jù)庫忽略大小寫的配置方法,文中通過代碼示例給大家講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • 修改MySQL的默認(rèn)密碼的四種小方法

    修改MySQL的默認(rèn)密碼的四種小方法

    對于windows平臺來說安裝完MySQL后,系統(tǒng)就已經(jīng)默認(rèn)生成了許可表和賬戶,下文中就教給大家如何修改MySQ的默認(rèn)密碼。
    2015-09-09

最新評論

怀仁县| 北川| 读书| 措勤县| 茂名市| 饶阳县| 武功县| 灵璧县| 西城区| 永靖县| 西乌珠穆沁旗| 衡阳市| 通辽市| 平乐县| 无极县| 辰溪县| 葵青区| 乌兰察布市| 加查县| 镶黄旗| 庆云县| 邵阳县| 雅江县| 贡觉县| 金塔县| 达尔| 靖宇县| 新安县| 济阳县| 麻江县| 腾冲县| 图木舒克市| 佛冈县| 云安县| 阳春市| 越西县| 南溪县| 张家界市| 奇台县| 措勤县| 汝州市|