在 select, update 和 delete 語句中可以使用 join 來進行多表聯合查詢,join按照功能分為以下三類:
例如有以下三張資料表,它們之間沒有關聯關係,但都有city_code
字段:
現需要從三張資料表中聯合查詢,原始sql語句如下:
select a.city_name, b.city_population, c.city_gdp
from cities a
inner join city_infos b
on (
a.city_code = b.city_code
and b.modified_year = '2020'
)inner join city_indicators c
on (
a.city_code = c.city_code
and c.modified_year = '2020'
)order by a.city_code asc
在cakephp的controller類中實現以上聯合查詢,方式如下:
$this->cities->find()
->select([
'cities.city_name',
'cityinfos.city_population',
'cityindicators.city_gdp'
])->innerjoin(
['cityinfos' => 'city_infos' //設定表的別名],[
'cities.city_code = cityinfos.city_code',
'cityinfos.modified_year' => '2020'])
->innerjoin(
['cityindicators' => 'city_indicators' //設定表的別名],[
'cities.city_code = cityindicators.city_code',
'cityindicators.modified_year' => '2020'])
->order([
'cities.city_code' => 'asc'
])->map(function($row) )
->toarray();
或者把所有要聯合的表寫在一起:
$this->cities->find()
->select([
'cities.city_name',
'cityinfos.city_population',
'cityindicators.city_gdp'
])->join([
'cityinfos' => [ //設定表的別名
'table' => 'city_infos',
'type' => 'inner',
'conditions' => [
'cityinfos.city_code = cities.city_code',
'cityinfos.modified_year' => '2020']],
'cityindicators' => [ //設定表的別名
'table' => 'city_indicators',
'type' => 'inner',
'conditions' => [
'cityindicators.city_code = cities.city_code',
'cityindicators.modified_year' => '2020']]
])->order([
'cities.city_code' => 'asc'
])->map(function($row) )
->toarray();
python對流進行join
對流的合併,有時各個流的進度需要根據資料的不同而定。def joinstreams instreams,getnext lambda data,livings livings 把各流進行關聯,instreams是流陣列,getnext函式決定從哪些流中取下一批資料,輸入引數為流編號,輸出應為需要從哪...
cakephp中使用查詢中joins
cakephp中使用查詢中joins 在cakephp中使用複雜的sql查詢是件麻煩的事情,我覺得是,你當然可以通過手寫sql語句解決,但是這樣導致的結果是其中的paginator不能用的,本來由cakephp得到的分頁資訊都得自己來寫,夠麻煩,好不容易找到下面的方法,可以這樣使用連線自己想要的表,...
使用Join代替In
我們知道,在sql中使用in讓我們的where子句可以規定多個值。當需要從乙個集合中查詢包含某幾個值的記錄的時候,通常我們會選擇使用in來實現,其實,使用join也可以實現這樣的功能,而且效能要比in好。我會從以下幾個方面來進行總結。使用in和join的效能對比 ef中如何使用join來代替in 首...