隨筆-7  評論-24  文章-102  trackbacks-0

          引用: 標量子查詢

          一個標量子查詢是一個放在圓括弧里的普通 SELECT查詢, 它只返回只有一個字段的一行.(參閱 Chapter 4 獲取有關寫查詢的信息。) 該 SELECT 將被執行, 而其單個返回值將在周圍的值表達式中使用. 把一個返回超過一行或者超過一列的查詢用做標量查詢是錯誤的. (不過,在特定的執行中,子查詢不返回行則不算錯誤;標量結果認為是 NULL.)該子查詢可以引用周圍查詢的變量, 那些變量也是在計算任意子查詢的時候當做常量使用的. 又見 Section 6.15.

          比如,下面的查詢找出每個州中的最大人口數量的城市∶

          SELECT name, (SELECT max(pop) FROM cities WHERE cities.state = states.name)
          FROM states;



          子查詢作為標量操作數--MySql數據庫
          ps: 這種方法的只能查詢單一值

          《Oracle 高效設計》 讀書思考--標量子查詢查詢性能討論
          能提供不少思路


          select     n.ex_name,     c.customer_name,     n.remark,          e.employee_name as create_name,     n.create_user,         n.project_id,   n.id as node_id,         n.model_id,     n.file_id,             g.grade_name as level_name,     t.type as type_name,     
                   exe.exe_ids,  exe.exe_names,    dept.dept_ids,         dept.dept_names,      
              
          Convert(DATE_FORMAT(pn.node_end_time, '%Y年%c月%e日') USING utf8) as end_time     
          from     hrp_project_execution n 
          left join hrp_cycle_grade g on g.id = n.worklevel     
          left join hrp_work_type t on t.id = n.worktype     
          left join hrp_customer c on c.id = n.customer_id     
          left join hrp_company_employee_info e on e.id = n.create_user     
          left join hrp_project_node pn on pn.id = n.node_id
          left join (select ne.execution_id, Convert(GROUP_CONCAT(ne.executor_id) USING utf8) as exe_ids,      GROUP_CONCAT(e.employee_name) as exe_names  
                 
          from  hrp_project_execution_executor ne     
                 
          inner join hrp_company_employee_info e on e.id = ne.executor_id     
                 
          where ne.delete_flag = 0       and    ne.execution_id = 46  group by ne.execution_id 
                 ) exe 
          on exe.execution_id = n.id
          left join (select de.exectuion_id, Convert(GROUP_CONCAT(de.deptor_id) USING utf8) as dept_ids,          GROUP_CONCAT(e.employee_name) as dept_names  
                 
          from  hrp_project_execution_deptor de     
                 
          inner join hrp_company_employee_info e on e.id = de.deptor_id     
                 
          where de.delete_flag = 0       and    de.exectuion_id = 46  group by de.exectuion_id
                 ) dept 
          on dept.exectuion_id = n.id
          where    n.id = 46
          ps. 自己寫的部分, 東西鑲嵌在 left join 部分
          posted on 2009-07-15 12:47 黃小二 閱讀(1916) 評論(0)  編輯  收藏 所屬分類: [DB].Oracle[DB].MySQL[DB].SQL Server
          主站蜘蛛池模板: 龙陵县| 临颍县| 镇雄县| 宁武县| 丰顺县| 建德市| 浙江省| 元谋县| 石首市| 凤翔县| 抚顺市| 潢川县| 汉寿县| 龙门县| 贡山| 阿拉尔市| 清徐县| 汉阴县| 威远县| 思南县| 汶川县| 将乐县| 涿鹿县| 大方县| 建阳市| 新闻| 易门县| 大安市| 昭通市| 东乡县| 米脂县| 武夷山市| 隆化县| 长泰县| 安岳县| 班玛县| 呼伦贝尔市| 涞源县| 牙克石市| 安塞县| 定西市|