mysql線上一些隱患查詢sql

2022-05-22 02:00:14 字數 2661 閱讀 4038

開發寫了幾個語句,覺得查詢結果跟邏輯有點不相符,就拿到這裡一起分析了下。

語句如下:

select

tp.title, tp.amount,

ifnull(

sum(case

when tu.type =

1then ti.invest_amount else

0end),0) as

ainvestamount,

ifnull(

sum(case

when tu.type =

2then ti.invest_amount else

0end),0) as

binvestamount,

ifnull(

sum(case

when tu.type =

3then ti.invest_amount else

0end),0) as

cinvestamount

from t_invest ti join t_user tu on ti.user_id

= tu.id join t_project tp on ti.project_id =

tp.id

where tp.id =

'48346631623950333337353439383060

';

其中t_project 中有id:48346631623950333337353439383060,但在t_invest中是沒有此project_id的。所以這條語句理論上應該是沒有任何輸出,但實際上卻輸出了如下結果:

為了方便說明此問題,我們來建立如下的**及資料。

mysql>

select

*from

t1;+

----+-------+

| id | name |+--

--+-------+|3

| chen ||1

| zhang |+--

--+-------+

2 rows in

set (0.00

sec)

mysql

>

select

*from

t2;+

------+--------+

| id | course |+--

----+--------+|2

| math |+--

----+--------+

1 row in

set (0.00

sec)

然後執行如下語句1:

mysql

>

select t1.id,t1.name,t2.id,t2.course,sum(t1.id) from t1 join t2 on t1.id=t2.id where t1.id=1;

+----+-------+------+--------+------------+

| id | name | id | course |

sum(t1.id) |+--

--+-------+------+--------+------------+|1

| zhang |

null

|null

|null|+

----+-------+------+--------+------------+

1 row in

set (0.00 sec)

發現竟然有輸出,再執行如下的語句2:

mysql>

select t1.id,t1.name,t2.id,t2.course,sum(t1.id) from t1 join t2 on t1.id=t2.id where t1.id in(1,null

) ;+

----+------+------+--------+------------+

| id | name | id | course |

sum(t1.id) |+--

--+------+------+--------+------------+

|null

|null

|null

|null

|null|+

----+------+------+--------+------------+

1 row in

set (0.00 sec)

發現全部為null。

執行如下語句3,返回empty set。

mysql>

select t1.id,t1.name,t2.id,t2.course,sum(t1.id) from t1 join t2 on t1.id=t2.id where t1.id=

1group

byt1.id;

empty

set (0.00 sec)

mysql中的語法並不是特別的嚴格,語句1與語句2其實在oracle中是會報語法檢查不通過的。會報:ora-00937: 不是單組分組函式

一般情況下用到聚合函式一般得加上group by會比較嚴格些,而出來這樣的狀況只有在有join的時候出來,單錶查詢還是沒問題的,聯合表查詢聚合函式有使用的話推薦用語句3的寫法。

mysql線上一些隱患查詢sql

開發寫了幾個語句,覺得查詢結果跟邏輯有點不相符,就拿到這裡一起分析了下。語句如下 select tp.title,tp.amount,ifnull sum case when tu.type 1then ti.invest amount else 0end 0 as ainvestamount,if...

mysql 查詢系統 mysql一些系統查詢sql

一 好言 別把最好的時光,浪費在無謂的等待與猶豫不決中。二 背景 記錄下有關sql查詢mysql系統變數等資訊。三 mysql一些系統查詢 檢視索引 show index from db.table 檢視資料路連線數 show status like threads show global stat...

MySQL一些常見查詢方式

1 查詢埠號命令 2 檢視版本號 3 檢視預設安裝的mysql的字符集 4 mysql預設編碼是latin1,如果儲存中文的話就會出現亂碼 配置方法 1 拷貝 usr local mysql support files下的任意乙個 cnf檔案到 etc my.cnf 我拷貝my default.cn...