日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

UNION,EXISTS,IN等在SQL语句中的灵活应用和场境的选择。

發布時間:2025/3/15 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UNION,EXISTS,IN等在SQL语句中的灵活应用和场境的选择。 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天在QQ群里,有朋友問我這樣的一個SQL Server中查詢數據的問題,
表 A:
num?????? unit
001??????? a
002??????? b
003??????? c

表 B:
num????? unit
001??????? d


查詢顯示結果
001???? d
002???? b
003???? c

怎么實現?

看了這個問題第一感覺是,有點難度。
不過要表達的意思很明白:匹配的顯示b,不匹配顯示a.

問題來了,簡單的SQL語句中無法找到這樣的查詢方式能完成這項工作,不回答別人吧,又難受。說不會,顯得很沒面子。怎么辦呢?

于是以最短的時間分析了下,發現我可以分成兩個查詢兩完成工作。
即:SELECT a.num, b.unit
FROM a INNER JOIN
????? b ON a.num = b.num

SELECT DISTINCT a.num, a.unit
FROM a WHERE a.num NOT IN
????????? (SELECT b.num
???????? FROM b)
而清楚的記得union可以將兩個集合合并,只要集合的字段數目和類型是一樣的。
那就好辦,于是寫下:
SELECT a.num, b.unit
FROM a INNER JOIN
????? b ON a.num = b.num
UNION
SELECT DISTINCT a.num, a.unit
FROM a WHERE a.num NOT IN
????????? (SELECT b.num
???????? FROM b)

測試執行,搞定。

如果字段多,寫起來麻煩,想使用*,則部分數據冗余的寫法是:
SELECT a.*, b.unit AS extend
FROM a INNER JOIN
????? b ON a.num = b.num
UNION
SELECT DISTINCT a.*, a.unit AS extend
FROM a WHERE a.num NOT IN
????????? (SELECT b.num
???????? FROM b)

本以為問題就這樣解決了,但問題又來了,原因是這對單個字段是唯一鍵或主鍵時有效,如果唯一鍵是兩個或兩個以上的字段組成就不行了。

表 A:
num????num2?? unit
001???????a???? ?a
002???????b???? ?b
003?????? c??????c

表 B:
num???num2?? unit
001????? a???? ?? d


查詢顯示結果
num num1 unit
001????a ? d
002?? ?b?? b
003??? c? ?c

于是改寫成
SELECT a.*, b.unit AS extend
FROM a INNER JOIN
????? b ON a.num = b.num and a.num1 = b.num1
UNION
SELECT DISTINCT a.*, a.unit AS extend
FROM a
WHERE not exists?
(SELECT * from b where a.num=b.num and a.num1=b.num1)

轉載于:https://www.cnblogs.com/begincsdn/archive/2005/11/22/281783.html

總結

以上是生活随笔為你收集整理的UNION,EXISTS,IN等在SQL语句中的灵活应用和场境的选择。的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。