sql多對多查詢,效能,sql 資料庫 一對多查詢

2022-04-05 21:04:46 字數 4753 閱讀 3568

1樓:匿名使用者

select * from 產品表 where 產品id in(select 產品id from 產品表_參數列 where 引數id in(select 引數id from 引數 where 引數名稱 in('引數1','引數2'))) 速度不會很慢的

2樓:

select * from 產品表 where exists (select 產品id from 產品表_參數列 where 引數id in(select 引數id from 引數 where 引數名稱 in('引數1','引數2')

這樣更快點

3樓:

另外100萬行不多,我們這1天2500萬行,都沒事的

用 in 的效率都不高,必須要inner join

最快的方法:

select

(select 產品名稱 from 產品表 as c where c.產品id=a.產品id) as 產品名稱

from 產品表_參數列 as a inner join 產品表_參數列 as b

on a.產品id=b.產品id

and a.引數id=(select 引數id from 參數列 where 引數名稱=引數1)

and b.引數id=(select 引數id from 參數列 where 引數名稱=引數2)

當然產品表的產品id

參數列的引數id必須做成主鍵

產品表_參數列為產品id和引數id建立索引是必須的

4樓:清風泉

這樣的話用union比用in或者or好

select ... from .. where 引數 = 引數1union all

select ... from .. where 引數 = 引數2

sql 資料庫 一對多查詢

5樓:匿名使用者

你怎麼倆table1,後一個叫table2吧執行以下語句

select t1.考試學號,t1.科目,t2.考試成績from

(select a.科目,a.科目id,b.考試學號from

(select 科目,科目id from table1) as a,(select distinct 考試學號 from table2) as b) as t1 left join

table2 as t2 on t1.科目id=t2.科目id and t1.考試學號=t2.考試學號

結果截圖

下邊還有幾條沒顯示全,湊合看吧

6樓:匿名使用者

select t1.考試學號,t2.科目名,(select t3.

成績 from tab_student t3 where t3.學號= t1.學號 and t2.

科目id= t3.科目id)

from (select distinct 考試學號 from tab_student) t1, tab_科目 t2

sql 多對多查詢

7樓:匿名使用者

好幾種寫法,我這裡就寫一個算拋磚引玉吧,也算給你一個提示。

select name from a where id in (select c.aid from c where bin in (select id from b where job in ('q','r')))

也可以直接關聯到c表然後相等,這個辦法應該不錯,可以直接對應。

8樓:匿名使用者

select *

from

(select id,sum(money) as mm from a表 group by id) aaa,

(select id,sum(money) as nn from b表 group by id) bbb

where aaa.id=bbb.id and aaa.mm=bbb.nn;

-----------------------------

說明:先用語句,得到aaa,bbb兩個臨時表,裡面是(id,錢的求和);

然後疊加一個查詢,從表aaa,表bbb中,用條件,篩選出需要的記錄(id相等,錢求和相等);mm,nn是我為了欄位檢視方便,設定的兩個臨時欄位名。

-----------------------------

如果你是用workbench,語句正確執行要寫成一行。

9樓:

select a.id from

(select id,sum(money) m from a group by id) a

left join

(select id,sum(money) m from b group by id) b

on (a.id=b.id and a.m=b.m)這個你試試

10樓:

select name,job from 表a,表b where 表a.id=表b.id and (job="q" or job="r");

11樓:德瑪西亞小王爺

select a.name,b.job from 表c c , 表b b , 表a a

where c.aid =a.id

and c.bid =b.id

and b.id in('q','r')

sql多對多關係的兩表如何聯合查詢出所有的結果?

12樓:城春許木深

1、語句如下:

select project.*, [contract].* from project

left join contract_project on project.projectid = contract_project.projectid

left join [contract] on contract_project.contractid = [contract].contractid

注:contract在sql server中是關鍵字,因此使用了中括號。

2、使用left join

left join是以左表為準的。換句話說,左表(project)的記錄將會全部表示出來,而右表(contract_project)只會顯示符合搜尋條件的記錄

(例子中為: project.projectid = contract_project.

projectid)。對於contract表來說,contract_project表是它的左表。

此例以兩個left join 將三個表按條件聯接在一起。

擴充套件資料

連線通常可以在select語句的from子句或where子句中建立,其語法格式為:

select colunm_name1,colunm_name2

from table_name1

left join table_name2

on table_name1.colunmname=table_name2.colunmname

其中join_table指出參與連線操作的表名,連線可以對同一個表操作,也可以對多表操作,對同一個表操作的連線稱為自連線, join_type 為連線型別,可以是left join 或者right join 或者inner join 。

on (join_condition)用來指連線條件,它由被連線表中的列和比較運算子、邏輯運算子等構成。

13樓:匿名使用者

通過contract_project做中間表就行:

select *

from contract_project aleft join project b on a.projectid = b.projectid

left join contract c on a.contractid = c.contractid

前提是contract_project要大而全,包含所有的pid和cid,不然不行

14樓:匿名使用者

看的頭暈啊,呵呵,難的想

sql 一對多統計查詢

15樓:匿名使用者

借一下1l的語句

select u.id,u.nicename,u.imei,u.address,u.mobile,v.次數

from users as u ,

(select count(1) 次數,imei from reback where [time]>'2012-11-06'

and [time]<'2012-11-07' group by imei ) v

where v.imei = u.imei

order by v.次數 desc

然後順便一提,4000w的表,那麼time、imei兩列都要加索引,還有users表中的imei也要加索引

16樓:

select u.id,u.nicename,u.imei,u.address,u.mobile,

from users as u ,

(select count(imei) 次數,imei from reback where convert(varchar(10),[time],120) = '2012-11-06' group by imei ) v

where v.imei = u.imeiorder by v.次數 desc

你寫的重複查詢的太多了,整體結構不好

SQl怎麼構建多對多關係表,sql多對多關係如何建表

create table 教師 bai 教師du工號zhi 型別 dao primary key,教師姓名 型別版,教師地址 型別,教師 型別 create table 課程 權資訊 課程編號 型別 primary key,課程名稱 型別,資訊備註 型別 create table 任課 教師工號 型...

sql如何查詢空值的欄位,sql資料庫查詢中,空值查詢條件怎麼寫?

sql查詢空值的欄位寫法 select a.欄位 from student a where a.欄位 like student為表名 查詢類似空值的寫法 1 查詢名稱有退格鍵 select from t bd item info where charindex char 8 item name 0 ...

asp中使用sql查詢資料庫問題

sql 中 日期變數 需要加 sql select from base where date date 這樣可以.但是建議最好不要使用 關鍵字 做欄位名,sql語句如下.sql select from base where 你的非關鍵字欄位名 date 並且接收的date必須是日期格式。如2000 ...