這是一次面試碰到的題目,一開始以為要用到group by關鍵字,後來仔細想了下,其實不需要的。
這張資料表名為student,各欄位名如上圖所示
我寫的sql如下所示:
第一種:用關聯查詢
select distinct s1.*
from student s1, student s2
where s1.id != s2.id
and s1.`name` = s2.`name`
order by s1.id;
select distinct s1.*
from student s1 left join student s2
on s1.id != s2.id
where s1.`name` = s2.`name`
order by s1.id;
第二種:用巢狀查詢
select s1.*
from student s1
where s1.`name` in (
select s2.`name`
from student s2
where s2.id != s1.id
and s2.`name` = s1.`name`
)order by s1.id;
第三種:用exists子查詢
select s1.*
from student s1
where exists (
select 1
from student s2
where s2.id != s1.id
and s2.`name` = s1.`name`
)order by s1.id;
查詢結果如下:
注:第一種方法的distinct關鍵字必須要有,要不然會有重複的記錄。
ps:group by 關鍵字一般只有在統計查詢時才用到。還有如果用group by 關鍵字時,select查詢字段只能是集函式或者是group by 中的字段
oracle中一張表的某個欄位與另一張表關聯
今天在無意間查詢到乙個sql,有兩張表,一張使用者表,使用者表中有個personroles欄位,clob型別,裡面是逗號分隔的角色id a,b,c,d 需要查詢每個人和其現有的角色。問題在於使用者表和角色表的關聯,直接left join用roles.id in user.personroles 查詢...
SQL語句 查詢某個欄位在哪張表
資料庫版本 sql server 2012 測試資料庫 northwind,安裝方法請參考這篇文章 1.新建查詢,輸入以下語句 select from sys.syscolumns 執行,檢視結果 上面返回來庫中所有的列名,通過id我們可以在 sysobjects 中找到對應的表名稱 select ...
統計表中某個字段值相同的個數!!
在論壇裡找到的。呵呵 年代久遠,拿出來曬一下!其實不錯 現在有幾十萬的記錄,其中乙個欄位是車牌號,這個車牌號的記錄可能會有很多重複。比如車牌號為 abcde 的總共有多少個?請問能不能一次性的統計出所有不重複的車牌號的記錄數?比如 車牌abcde 12345 abcde 54321 12345 ab...