[2020528]寫sql語句不要忘記給欄位加上表別名.txt
[2020528]寫sql語句不要忘記給欄位加上表別名.txt
--//許多開發寫sql語句經常對於一些欄位前面不加表別名,有時候主要問題在於開發壓力太大,不注意這些細節.
--//昨天看連結我覺得應該讓開發養成習慣,給欄位前加上表或者表別名.
1.環境:
SCOTT@test01p> @ ver1
PORT_STRING VERSION BANNER CON_ID
------------------------------ -------------- -------------------------------------------------------------------------------- ----------
IBMPC/WIN_NT64-9.1.0 12.2.0.1.0 Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production 0
create table t1 as select rownum id ,'test'||rownum name from dual connect by level<=5;
create table t2 as select rownum idx ,'test'||rownum name from dual ;
--//分析略。
2.測試:
SCOTT@test01p> select * from t1 where id in (select id from t2);
ID NAME
---------- --------------------
1 test1
2 test2
3 test3
4 test4
5 test5
SCOTT@test01p> @ tpt/hash
HASH_VALUE SQL_ID CHILD_NUMBER HASH_HEX
---------- ------------- ------------ ---------
3260755764 511sg7v15qbtn 1 c25b2f34
SCOTT@test01p> @ expand_sql_text.sql 511sg7v15qbtn
SELECT "A1"."ID" "ID","A1"."NAME" "NAME" FROM "SCOTT"."T1" "A1" WHERE "A1"."ID"=ANY (SELECT "A1"."ID" "ID" FROM "SCOTT"."T2" "A2")
PL/SQL procedure successfully completed.
--//表T2並沒有id欄位。子查詢變成了(SELECT "A1"."ID" "ID" FROM "SCOTT"."T2" "A2")。
SCOTT@test01p> select * from t1 where name in (select name from t2);
ID NAME
---------- --------------------
1 test1
SCOTT@test01p> @ tpt/hash
HASH_VALUE SQL_ID CHILD_NUMBER HASH_HEX
---------- ------------- ------------ ---------
2780930533 a9vgd1kkw38g5 0 a5c1a1e5
SCOTT@test01p> @ expand_sql_text.sql a9vgd1kkw38g5
SELECT "A1"."ID" "ID","A1"."NAME" "NAME" FROM "SCOTT"."T1" "A1" WHERE "A1"."NAME"=ANY (SELECT "A2"."NAME" "NAME" FROM "SCOTT"."T2" "A2")
PL/SQL procedure successfully completed.
--//如果改成刪除就產生5條記錄。
SCOTT@test01p> delete from t1 where id in (select id from t2);
5 rows deleted.
SCOTT@test01p> rollback ;
Rollback complete.
--//所以應該讓開發養成良好編寫sql語句的習慣,給欄位加上表名或者表別名.單表問題不大,多表情況下要特別注意.
3.繼續測試:
--//如果寫成如下:
SCOTT@test01p> select * from t1 where t1.id in (select t2.id from t2);
select * from t1 where t1.id in (select t2.id from t2)
*
ERROR at line 1:
ORA-00904: "T2"."ID": invalid identifier
--//很容易定位錯誤。許多開發都沒有養成好的習慣特別在複雜sql語句多表連線的情況下。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2694908/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- sql語句修改欄位型別和增加欄位SQL型別
- SQL Server中獲取資料庫名、表名、欄位名和欄位註釋的SQL語句SQLServer資料庫
- [SQL]group by和order by是否能寫欄位別名SQL
- sqlserver採集欄位的sql語句SQLServer
- [20220329]是否開發寫錯sql語句.txtSQL
- 帝國CMS 批次修改欄位內容sql語句SQL
- SQL INSERT INTO 語句詳解:插入新記錄、多行插入和自增欄位SQL
- 怎麼給字串欄位加索引?字串索引
- [20201105]再分析sql語句.txtSQL
- [20220117]超長sql語句.txtSQL
- [20201210]sql語句優化.txtSQL優化
- [20220109]開發不應該這樣寫SQL語句.txtSQL
- [20220331]如何調整sql語句.txtSQL
- [20230329]記錄除錯sql語句遇到的問題.txt除錯SQL
- [20240607]PL/SQL中sql語句的註解.txtSQL
- [20240320]空格與sqlpus的sql語句.txtSQL
- [20200320]SQL語句優化的困惑.txtSQL優化
- sql語句抄寫作業SQL
- [20210407]分析sql語句的共享記憶體段3.txtSQL記憶體
- 【SQL】16 SQL CREATE INDEX 語句、 撤銷索引、撤銷表以及撤銷資料庫、ALTER TABLE 語句、AUTO INCREMENT 欄位SQLIndex索引資料庫REM
- sql小筆記(增刪改查——新增列、修改表名、列的欄位型別等)SQL筆記型別
- [20181119]sql語句執行緩慢分析.txtSQL
- [20181114]一條sql語句的優化.txtSQL優化
- [20211221]分析sql語句遇到的問題.txtSQL
- [20210923]sql語句佔用Sharable Memory分析.txtSQL
- SQL語句規範的寫法SQL
- [20211009]使用bash計算sql語句的sql_id.txtSQL
- MySQL中特別實用的幾種SQL語句送給大家MySql
- Django-ORM 之指定欄位別名DjangoORM
- delete 語句帶別名問題.delete
- [20200324]SQL語句優化的困惑2.txtSQL優化
- [20211224]vim外掛格式化sql語句.txtSQL
- [20211231]vim自動格式化sql語句.txtSQL
- [20220119]超長sql語句補充3.txtSQL
- [20220329]19c sql語句打補丁.txtSQL
- [20220120]超長sql語句補充4.txtSQL
- [20210112]ashtop查詢特定表的SQL語句.txtSQL
- [20191101]通過zsh計算sql語句的sql_id.txtSQL