重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
SELECT
成都創新互聯公司堅持“要么做到,要么別承諾”的工作理念,服務領域包括:做網站、成都做網站、企業官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯網時代的沁水網站設計、移動媒體設計的需求,幫助企業找到有效的互聯網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!
distinct?id,state,name
FROM
table1?main
WHERE
NOT?EXISTS(?select?1?FROM?table1?sub?where?main.id=sub.id?AND?main.statesub.state);
未經測試。。。純屬手寫,,如果以自己多年經驗來說的話。。這段話應該不會有多大問題。。。希望你自己仔細測試之后能夠提出寶貴意見!!!
不知道你希望的null,是空,還是字符啊?估計你希望的是字符,根據你的問題,我做的測試,你看看:
--
新建表
CREATE
TABLE
student(ID
VARCHAR2(20),NAME
VARCHAR2(20),school
VARCHAR2(20));
--
插入數據
INSERT
INTO
student(id,name,school)VALUES('1','1','1');
INSERT
INTO
student(id,name,school)VALUES('2','2','1');
INSERT
INTO
student(id,name,school)VALUES('3','3','1');
INSERT
INTO
student(id,name,school)VALUES('4','4','2');
COMMIT;
--
查詢school為1的后希望的到的結果是
1,1,1,2,2,1,3,3,1
SELECT
a.id,
a.name,
a.school
FROM
student
a
WHERE
a.school
=
'1';
--
假如查詢school為2的,則希望結果為
4,4,2,null,null,null,null,null,null
SELECT
nvl(a.id,'null'),
nvl(a.name,'null'),
nvl(a.school,'null')
FROM
student
a
WHERE
a.school
=
'2'
UNION
ALL
SELECT
nvl2(a.school,'null',a.id),
nvl2(a.school,'null',a.name),
nvl2(a.school,'null',a.school)
FROM
student
a
WHERE
a.school
'2';
希望對你有所幫助。
用case和正則表達式可以處理,不知道列1的值為3時怎么處理,所以我沒處理,你可以自己修改。
with t as
( select 1 col1, 'a,d' col2 from dual
union all
select 1, null from dual
union all
select 2, 'b,c' from dual
union all
select 2, 'b,c' from dual
union all
select 2, null from dual
union all
select 3, 'a,c' from dual
)
select col1, case when col1 = 1
then case when col2 is null then 'a'
when col2 is not null then regexp_substr(col2,'([a-b])')
else col2 end
when col1 = 2
then case when col2 is null then 'b'
when col2 is not null then regexp_substr(col2,'([c-d])')
else col2 end
else col2 end
from t;
如果表結構和要查詢的字段一樣的話,可以考慮將三個查詢語句通過union all聯結起來,然后在各查詢語句中進行判斷,若不滿足條件則查詢字段都會空,最后總的去掉全空的記錄。這個是笨方法,不然只能用存儲過程了
1、先創建一個簡單的數據表。
2、插入數據,順便復習插入數據了,最好多插幾個,查詢的時候更明顯。
3、select后面的字段是等下查詢結果所顯示的,where就是限制的條件,根據where查詢到對應的列。
4、如果字段里面有數字的話也是可以根據數字大小進行查詢的。
5、加入and語句可以同時限制兩個條件來查詢。
6、用%來查詢,百分號在字母前表示以什么字母開頭的,這里就是以名字為d開頭來查詢數據,同理把%放在后面就是以d結尾的名字。
sql查詢由兩部分組成
(1)查詢的顯示內容部分的表,也就是slelct后面的顯示部分的表,那么就一定是查詢的,比如這里的select t1.a,t2.b,t3.c,那么不管怎么說一定查詢了 t1,t2,t3三張表,如果只查詢了t1,t2兩張,那么t3部分的數據是怎么出來的?所以,只要有顯示的表就一定是查詢的表。包括在顯示部分(select中)的“子查詢”,也算在這部分。
(2)流程表或中間表,這部分的表也查詢了但不會出現在顯示中,比如
select t1.a,t2.b,from t1,t2,t3 where t2.id=t3.id and t1.aa=t3.aa,這里顯示的是t1,t2,但是查詢的時候t1,t2,t3都查詢了,只是t3屬于中間表不需要顯示,但是他也查詢了,不然怎么判斷t2.id=t3.id和t1.aa=t3.aa。當然這種也包括在where后面的子查詢,子查詢的表也算中間表。
當然以上是某種復雜的講解,如果想簡單的講解也容易,那就是凡是跟在from后面的表,都是查詢的表(左右連接也算在from后),如果這張表不需要查詢,那么干嘛要寫在這個語句中?當然包括子查詢的from,只要是from那么后面的表一定就是需要查詢的表。