關於SQL語句外連線中的過濾條件
使用左外連線時,注意以下兩點
- 第一張表的過濾條件寫在where子句中
- 其餘各張表的過濾條件寫在on子句中
假設有以下兩張表
A表
id | active |
---|---|
1 | 1 |
2 | 1 |
3 | 1 |
4 | 0 |
id | aid | active |
---|---|---|
11 | 1 | 1 |
12 | 1 | 0 |
22 | 2 | 1 |
23 | 2 | 1 |
兩張表的id欄位都是主鍵,B表的aid欄位為指向A表的外來鍵。
兩張表中的active欄位表示當前記錄是否還有效。active=0表示該記錄已經被邏輯刪除。
現在要求使用左連線結合A表和B表,但是必須過濾掉各自表中已經被邏輯刪除(即active=0)的記錄。
要求的結果
A.id | A.active | B.id | B.aid | B.active |
---|---|---|---|---|
1 | 1 | 11 | 1 | 1 |
2 | 1 | 22 | 2 | 1 |
2 | 1 | 23 | 2 | 1 |
3 | 1 |
錯誤的SQL 1
select A.*, B.*
from A left join B
on A.id = B.aid and A.active=1 and B.active=1
A.id | A.active | B.id | B.aid | B.active |
---|---|---|---|---|
1 | 1 | 11 | 1 | 1 |
2 | 1 | 22 | 2 | 1 |
2 | 1 | 23 | 2 | 1 |
3 | 1 | |||
4 | 0 |
錯誤的SQL 2
select A.*, B.*
from A left join B
on A.id = B.aid
where A.active=1 and B.active=1
A.id | A.active | B.id | B.aid | B.active |
---|---|---|---|---|
1 | 1 | 11 | 1 | 1 |
2 | 1 | 22 | 2 | 1 |
2 | 1 | 23 | 2 | 1 |
正確的SQL 1
select A.*, B.*
from A left join B
on A.id = B.aid and B.active=1
where A.active=1
A.id | A.active | B.id | B.aid | B.active |
---|---|---|---|---|
1 | 1 | 11 | 1 | 1 |
2 | 1 | 22 | 2 | 1 |
2 | 1 | 23 | 2 | 1 |
3 | 1 |
正確的SQL 2
select A.*, B.*
from A left join B
on A.id = B.aid
where A.active=1
and (B.id is null or B.active=1)
A.id | A.active | B.id | B.aid | B.active |
---|---|---|---|---|
1 | 1 | 11 | 1 | 1 |
2 | 1 | 22 | 2 | 1 |
2 | 1 | 23 | 2 | 1 |
3 | 1 |
正確的SQL 3
select A.*, B.*
from (select * from A where A.active=1) A
left join (select * from B where B.active=1) B
on A.id = B.aid
A.id | A.active | B.id | B.aid | B.active |
---|---|---|---|---|
1 | 1 | 11 | 1 | 1 |
2 | 1 | 22 | 2 | 1 |
2 | 1 | 23 | 2 | 1 |
3 | 1 |
相關推薦
關於SQL語句外連線中的過濾條件
使用左外連線時,注意以下兩點 第一張表的過濾條件寫在where子句中其餘各張表的過濾條件寫在on子句中假設有以下兩張表 A表 id active 1 1 2 1 3 1 4 0 B表 id aid active 11 1 1 12 1 0 22 2 1 23 2 1 這
工作總結 sql 中過濾條件 中的 (where中的) and
sts 如果 9.png 聯系 .com 處理 src 分享圖片 http 總結: 在where 後面做過濾的時候 如果 有 字段1 必須滿足某種值 字段2 要滿足 某種或某值的時候 直接 and 字段1 = ‘a’ an
Oracle外連線中對非連線條件使用(+)需要注意的地方
1.先來說下Oracle外連線語句中對非連結條件使用(+)的作用問題 之前問過朋友,當時大腦處於短路狀態,居然沒想明白作用是啥。先看例子如下: select * from dept,emp where dept.deptno=emp.deptno(+) and emp.en
php中mysql一條sql語句查詢出所有符合條件的資料,該怎麼寫?
假如一個表裡有個classid欄位是類別的id,我想用一條sql語句查出classid=5的所有資料的id該怎麼查呢?正常是要迴圈,放到數組裡的吧 如圖,我想查詢classid=2的對應所有id,用
sql語句刪除庫中所有表
eal stat sele select objects alloc eight rain 過程 1 --/第1步**********刪除所有表的外鍵約束*************************/ 2 use DCCalc_Engine 3 GO 4 D
Sql語句中用別名作判斷條件
當我們使用某個表示式作為輸出的一列時,我們無法再Where條件中直接使用該列作判斷條件. 例如下面的SQL語句: select id, (c1 + c2) as s from t1 
前端之路:sql語句,表中隨機獲取一條記錄(資料)。(或者獲取隨機獲取多條(記錄)資料)
<!--表中獲取隨機一條title 耗時0.01s id==隨機欄位,最好為表id--> SELECT * FROM `tableName` AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `ta
資料庫效能之SQL語句優化(中)
百萬級資料優化 一.I_IPTVLOGIN00 (五十萬),TEMP_STBINFO (五百萬) 1.select a.loginAccount,a.stbID,b.DEV_SNO from I_IPTVLOGIN00 a,TEMP_STBINFO b where a.s
Zoey.Dapper--Dapper擴充套件之把SQL語句放到檔案中
介紹 不知道大家在用Dapper的時候SQL語句是寫到哪的,目前看網上的例子都是寫到類裡面的. 此專案的目的是把SQL語句放到檔案(xml)中 目前只是初步版本,只是說明了意圖,後面會持續完善和優化 功能說明 SQL 語句單獨存放在檔案(xml)中 支援配置多資料夾(暫不支援指定具體檔案) 實時監
用SQL語句向表格中插入資料
向表格中插入資料 SQL語言使用insert語句向資料庫表格中插入或新增新的資料行。Insert語句的使用格式如下: insert into tablename (first_column,...last_column) values (first_v
Sql語句在日期中新增或減去指定的時間
SQL語句使用DATEADD得到一個時間加上或減去指定天數之後的時間。也適用於小時、分鐘、秒鐘等等DATEADD() 函式功能:在日期中新增或減去指定的時間間語法:DATEADD(datepart,number,date)date 引數是合法的日期表示式。number 是您希
SQL語句Left join 中On和Where的用法區別
如果SQL用的是Left Join ,On後面的條件對Left的表沒有作用,只對Right的表有過濾作用,Where語句可以對Left的表有過濾作用 如果SQL用的是Right Join ,On後面的條件對Right的表沒有作用,只對Left的表有過濾作用,Where
oracle 編寫sql語句獲取表中的最後一條資料
select p.* from (select * from t_cfg_menu t order by t.menu_id desc) p where rownum = 1 首先查詢表中資料按降序排列,然後通過“rownum = 1”獲取第一條資料,即是原
(轉貼)SQL 左外連線,右外連線,全連線,內連線
http://www.blogjava.net/zolly/archive/2007/10/23/SQLJION.html 聯接條件可在 FROM 或 WHERE 子句中指定,建議在 FROM 子句中指定聯接條件。WHERE 和 HAVING 子句也可以包含搜尋條件,以進一步篩
如何用一條sql語句刪除表中所相同的記錄?
刪除重複資料 一、具有主鍵的情況 a.具有唯一性的欄位id(為唯一主鍵) delete table where id not in ( select max(id) from table group by col1,col2,col3... ) group by 子句後跟的欄位就是你用來判斷
Qt使用QSqlTableModel執行SQL語句,QLineEdit輸入查詢條件完成查詢功能
void ConnectDb::dbTableView() {QSqlTableModel *model;QString sName, sAge, sHeight, sSex;int nAge = 0, nHeight = 0;model = new QSqlTableModel(this);model-&g
常用SQL語句例項(含過濾及刪除重複資料、匯入匯出資料等)
本文整理一些常用的SQL語句例項(如過濾重複資料、刪除重複資料、匯入匯出資料等),收藏備用,不斷更新中……。歡迎訪問作者網站獲取最新版:http://hi.wonsoft.cn -------------------------------第一部份 高階技巧-------
如何用sql語句對性別的 約束條件讓它只能填 男 或 女
clas nsh 希望 net 我們 大神 ons const 約束 ALTER TABLE tb WITH NOCHECK ADD CONSTRAINT col1_check CHECK (性別 in(‘男‘,‘女‘))
SQL 左外連線,右外連線,全連線,內連線
連線條件可在FROM或WHERE子句中指定,建議在FROM子句中指定連線條件。WHERE和HAVING子句也可以包含搜尋條件,以進一步篩選連線條件所選的行。 連線可分為以下幾類: 內連線。(典型的連線運算,使用像 = 或 <> 之類的比較
利用native SQL實現外連線查詢
String sql ="select s.serviceid as serviceid ,s.servicename,count(o.id) as amount from service as s left join orderrelation as o on (s.se