作者KeithYeh (棒球痴)
看板Database
标题[SQL ] 关於资料的选取
时间Thu Sep 16 00:08:33 2010
各位版大好,小弟是刚接触SQL不久的新手
使用的DBMS是ACCESS
目前碰到一个问题
有两个资料表长下面这样
TABLE 1 TABLE2
ID1 c1 c2 c3 ID1 ID2
============================= ==============
1 1-c1 1-c2 1-c3 1 A
2 2-c1 2-c2 2-c3 1 B
3 3-c1 3-c2 3-c3 1 C
4 4-c1 4-c2 4-c3 3 A
5 5-c1 5-c2 5-c3 3 C
4 B
5 A
5 B
我使用这样的指令
SELECT * FROM t1 LEFT OUTER JOIN t2 ON t1.ID1 = t2.ID1
JOIN出来的资料表长这样(先当作TABLE3)
TABLE 3
ID1 c1 c2 c3 ID2
====================================
1 1-c1 1-c2 1-c3 A
1 1-c1 1-c2 1-c3 B
1 1-c1 1-c2 1-c3 C
2 2-c1 2-c2 2-c3 null
3 3-c1 3-c2 3-c3 A
3 3-c1 3-c2 3-c3 C
4 4-c1 4-c2 4-c3 B
5 5-c1 5-c2 5-c3 A
5 5-c1 5-c2 5-c3 B
我想要取得黄色的那几列资料
也就是以ID1当分组,ID2不包含C但是有含NULL的那几列
我把原本的指令加上
WHERE ID2 <> 'C' OR ID2 IS NULL
得到的结果是这样
ID1 c1 c2 c3 ID2
====================================
1 1-c1 1-c2 1-c3 A
1 1-c1 1-c2 1-c3 B
2 2-c1 2-c2 2-c3 null
3 3-c1 3-c2 3-c3 A
4 4-c1 4-c2 4-c3 B
5 5-c1 5-c2 5-c3 A
5 5-c1 5-c2 5-c3 B
後来另外建了一个跟TABLE3一样的资料
试着用 GROUP BY 加上 HAVING 的用法
SELECT ID1, c1, c2, c3 FROM table3
GROUP BY ID1, c1, c2, c3
HAVING COUNT(ID2 <> 'C') > 0
得到的结果是这样
ID1 c1 c2 c3
=============================
1 1-c1 1-c2 1-c3
3 3-c1 3-c2 3-c3
4 4-c1 4-c2 4-c3
5 5-c1 5-c2 5-c3
想要的结果应该是这样
ID1 c1 c2 c3
=============================
2 2-c1 2-c2 2-c3
4 4-c1 4-c2 4-c3
5 5-c1 5-c2 5-c3
稍微修改了一下SQL指令
SELECT ID1, c1, c2, c3,
COUNT(ID2 <> 'C') FROM table3
GROUP BY ID1, c1, c2, c3
ID1 c1 c2 c3 COUNT(ID2<>'C')
===============================================
1 1-c1 1-c2 1-c3 3
2 2-c1 2-c2 2-c3 0
3 3-c1 3-c2 3-c3 2
4 4-c1 4-c2 4-c3 1
5 5-c1 5-c2 5-c3 2
查了一下发现COUNT()里面只能写栏名,不能写判断式的样子
请问各位版大SQL要怎麽下,才能得到我想要的结果
有劳各位版大了 <(_ _)>
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.39.172.135
1F:→ elenaser:有汇总函数时请用Having 09/16 22:59
2F:推 GaoWan:SELECT * FROM table3 WHERE id1 NOT IN(SELECT id1 FROM 09/18 00:33
3F:→ GaoWan:table3 WHERE ID2='C') 09/18 00:38
4F:→ KeithYeh:谢谢楼上,我解决了 <(_ _)> 09/18 16:22