開發寫了幾個語句,覺得查詢結果跟邏輯有點不相符,就拿到這裡一起分析了下。
語句如下:
select其中t_project 中有id:48346631623950333337353439383060,但在t_invest中是沒有此project_id的。所以這條語句理論上應該是沒有任何輸出,但實際上卻輸出了如下結果: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
';
為了方便說明此問題,我們來建立如下的**及資料。
mysql>發現竟然有輸出,再執行如下的語句2: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)
mysql>發現全部為null。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)
執行如下語句3,返回empty set。
mysql>mysql中的語法並不是特別的嚴格,語句1與語句2其實在oracle中是會報語法檢查不通過的。會報:ora-00937: 不是單組分組函式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)
一般情況下用到聚合函式一般得加上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...