轉(zhuǎn)帖|其它|編輯:郝浩|2010-07-28 10:28:37.000|閱讀 991 次
概述:以前一直以為表的別名只是為了能夠讓 SQL 語句能夠簡短一些,沒有其他用處,今天經(jīng)過實驗才發(fā)現(xiàn),原來給表起不同的別名可以讓一個表當(dāng)多個表用。本文主要講解MySQL 表的別名的真正用法。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
用 MySQL 很久了,一直被 MySQL 中沒有嵌套查詢所困擾,雖然 MySQL 4.1 中支持這個特性,但是我的 PHP 的程序都使用的 MySQL 函數(shù)庫,而不是 MySQLi 函數(shù)庫,所以 4.1 的特性用不上。
以前遇到需要嵌套查詢的地方,一般轉(zhuǎn)化為兩個表的連接查詢來解決。可是最近做的一個程序里面,發(fā)現(xiàn)需要嵌套查詢的地方是對同一個表進(jìn)行的兩次查詢,所以沒法直接轉(zhuǎn)化為兩個表的連接查詢。要轉(zhuǎn)化為用 PHP 代替 MySQL 做這種事實在是太麻煩了(以前就干過這種傻事),于是一直想找個簡單的替代法。也許是靈感突發(fā),也許是最近天天再翻 MySQL 手冊對 MySQL 的查詢有了更深入的理解,今天忽然想到可以用表的別名來解決這個問題。
以前一直以為表的別名只是為了能夠讓 SQL 語句能夠簡短一些,沒有其他用處,今天經(jīng)過實驗才發(fā)現(xiàn),原來給表起不同的別名可以讓一個表當(dāng)多個表用。舉個我程序中的例子來說明一下:
我的程序中有一個分類表,為了實現(xiàn)無限多級分類,我在分類表中有一個 parent_id 字段,這個字段保存的是這條記錄所代表的分類的父分類 id 號,如果這個字段為 null,則表示頂級分類。現(xiàn)在我需要刪除一個分類,這個分類可能有子分類,因此,刪除這個分類以后,它的子分類的 parent_id 號就需要改變一下,而不能繼續(xù)指向這個不存在的分類,因此我希望刪除這個分類以后,它的子分類的父分類變?yōu)樗母阜诸悺S龅竭@種情況,以前我就不知道該怎么辦好,現(xiàn)在好了,用下面的語句就可以了:
lock tables `categories` write, `categories` as `c1` write, `categories` as `c2` write;
update `categories` as `c1`, `categories` as `c2` set `c1`.`parent_id` = `c2`.`parent_id` where `c1`.`parent_id` = `c2`.`cat_id` and `c2`.`cat_id` = $cat_id;
delete from `categories` where `cat_id` = $cat_id;
unlock tables;
這里需要注意的一點是,鎖定表的時候,一定要把要操作的表和表的別名都鎖定,否則下面的語句會出錯。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:CoolCode.CN