[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
- Sqlserver修改線上表的表欄位型別SQLServer型別
- pl/sql dev建表加欄位時建的欄位名都帶了“”SQLdev
- 用SQL語句增加刪除修改欄位SQL
- 通用SQL語句修改欄位預設值SQL
- oracle 中查詢一個表的所有欄位名以及屬性的sql語句應該怎麼寫?OracleSQL
- 在SQL Server中修改欄位型別和欄位名稱的儲存過程SQLServer型別儲存過程
- SQL INSERT INTO 語句詳解:插入新記錄、多行插入和自增欄位SQL
- PL/SQL Developer中輸入SQL語句時如何自動提示欄位SQLDeveloper
- mysql 用sql語句查詢一個表中的所有欄位型別、註釋MySql型別
- SQL Server語句刪除帶有預設值的欄位SQLServer
- SQL SERVER 資料庫查詢表和欄位資訊語句SQLServer資料庫
- [Mysql 查詢語句]——查詢欄位MySql
- 利用 alter 語句修改欄位屬性
- sqlite sql 修改欄位型別SQLite型別
- SQL語句筆記SQL筆記
- oracle 通過sql profile為sql語句加hintOracleSQL
- [20220329]是否開發寫錯sql語句.txtSQL
- SQL 語句調優_SQL傳遞引數的資料型別與表索引欄位型別保持一致SQL資料型別索引
- Django-ORM 之指定欄位別名DjangoORM
- sql小筆記(增刪改查——新增列、修改表名、列的欄位型別等)SQL筆記型別
- 學習筆記----一句SQL語句寫個乘法表筆記SQL
- sql語句抄寫作業SQL
- 如何寫這個sql語句?SQL
- 利用SQL語句完成位操作 (轉)SQL
- 【SQL】16 SQL CREATE INDEX 語句、 撤銷索引、撤銷表以及撤銷資料庫、ALTER TABLE 語句、AUTO INCREMENT 欄位SQLIndex索引資料庫REM
- delete 語句帶別名問題.delete
- ORACLE 通過SPM為SQL語句加HINTOracleSQL
- MySQL欄位型別小記MySql型別
- [20150403]修正sql語句.txtSQL
- GORM 如何讀取別名欄位的值GoORM
- MySQL中特別實用的幾種SQL語句送給大家MySql
- sqlserver查詢一個庫所有表的欄位名及欄位型別SQLServer型別
- SQL語句規範的寫法SQL
- OCI插入SQL語句的寫法SQL