當前位置:首頁 » 編程語言 » sql取兩個欄位的笛卡爾
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql取兩個欄位的笛卡爾

發布時間: 2022-06-02 19:07:50

A. 急,急,急,請問一個sql的select問題

應該是你的用戶留言表裡有重復信息,點擊SELECT查詢出了所有的,
如果想不顯示重復的項 請加上DISTINCT

B. SQL中笛卡爾積有什麼用

某些情況下,用於 尋找連續日期中殘缺的數據 的時候,可以先笛卡爾積做一個排列組合。然後和目標表進行關聯,查找哪些數據缺少了。

例如有個考勤記錄表,記錄著100個人的2011年4月的考勤信息,理論上這些人應該每天都有記錄的。
但是實際上某些人在某些天上面的數據,缺少了。
一天一天的查詢,還是一個人一個人的查詢,都有些麻煩。
這種情況下,可以針對 每個人 與 每一天 做一個 笛卡爾積 的處理。
然後與實際的表去關聯。就很容易查詢出結果了。

C. 2個表的笛卡爾積怎麼用sql語句表示

第一個表的行數乘以第二個表的行數等於笛卡爾積結果集的大小

SELECT * FROM table1 CROSS JOIN table2

select a.*,b.* from table1 a ,table2 b

D. 寫sql語句 一般什麼時候出現笛卡爾積如何避免

樓主這個問題,表達的不是很准確。事實上你所說的什麼時候出現笛卡爾積,應該是指一對多關系的時候,如果避免重復,而不是如何避免笛卡爾積。笛卡爾積在SQL中是有特殊的關聯來求笛卡爾積的,求笛卡爾積的指令是cross join。那麼回到如何避免重復的問題上,一般對於SQL開發來說,這是讓很多人頭疼的問題。一般呢,我個人把重復定義為如下三種情況:
第一種,原數據重復,指的是對應關系表中的數據本身就存在重復。但這種情況並不多,開發的時候會設定主鍵,一般情況較少。這種情況通常把需要使用的粒度數據distinct後,再關聯就可以了。
第二種,就是維度重復。比如有區域表,分別是省市縣三列,而你要統計的是到省的數據,這樣你直接寫join的時候會直接關聯出很多條,這樣通常使用子查詢去除維度重復後,再關聯即可
第三種,就是在一對多關系關聯出來後的數據維度重復。有些東西是存放很多關系表的,在關系表關聯後出現重復數據是個很正常的事情,但是可能由於需求比較特別,這樣我們通常對這些數據進行排序組合,匯總後取數的原則,來選出我們需要的數據。
當然,說了這么多,其實怎麼寫一段SQL,還是要看需求和數據結構。具體的數據結構和具體的需求,定位了一段SQL該怎麼寫。多實踐,你就會感悟到了

E. 誰能給我詳細的解釋下在sql中的笛卡爾是怎麼樣的!

SQL中大概有這么幾種JOIN:
cross join
inner join
left outer join
right outer join
full outer join

他們都是基於cross join(笛卡爾乘積),舉例說明

A_test表
Id a_name a_describe
1 a11111 a11111
2 a22222 a22222
3 a33333 a33333
B_test表
Id b_name b_describe
1 b11111 01
1 b11111 02
2 b22222 01
2 b22222 02
3 b44444 04
select * from a_test a //查詢出所有a表中的所有記錄 3條
select * from b_test b //查詢出所有b表中的所有記錄 5條

select * from a_test a cross join b_test b //a b 兩表的笛卡爾乘積 即所有的組合 共15條記錄
結果:
1 a11111 a111111 1 b11111 01
1 a11111 a111111 1 b11111 02
1 a11111 a111111 2 b22222 01
1 a11111 a111111 2 b22222 02
1 a11111 a111111 4 b44444 01
2 a22222 a222222 1 b11111 01
2 a22222 a222222 1 b11111 02
2 a22222 a222222 2 b22222 01
2 a22222 a222222 2 b22222 02
2 a22222 a222222 4 b44444 01
3 a33333 a333333 1 b11111 01
3 a33333 a333333 1 b11111 02
3 a33333 a333333 2 b22222 01
3 a33333 a333333 2 b22222 02
3 a33333 a333333 4 b44444 01
1 a11111 a111111 1 b11111 01
1 a11111 a111111 1 b11111 02
1 a11111 a111111 2 b22222 01
1 a11111 a111111 2 b22222 02
1 a11111 a111111 4 b44444 01
2 a22222 a222222 1 b11111 01
2 a22222 a222222 1 b11111 02
2 a22222 a222222 2 b22222 01
2 a22222 a222222 2 b22222 02
2 a22222 a222222 4 b44444 01
3 a33333 a333333 1 b11111 01
3 a33333 a333333 1 b11111 02
3 a33333 a333333 2 b22222 01
3 a33333 a333333 2 b22222 02
3 a33333 a333333 4 b44444 01
select * from a_test a inner join b_test b on a.id = b.id
//在笛卡爾乘積的結果集中去掉不符合連接條件的行 包含於笛卡爾乘積
結果:
1 a11111 a111111 1 b11111 01
1 a11111 a111111 1 b11111 02
2 a22222 a222222 2 b22222 01
2 a22222 a222222 2 b22222 02
1 a11111 a111111 1 b11111 01
1 a11111 a111111 1 b11111 02
2 a22222 a222222 2 b22222 01
2 a22222 a222222 2 b22222 02
select * from a_test a left outer join b_test b on a.id = b.id
//是在inner join的結果集上加上左面表中沒被選上的不相等的記錄,不包含於笛卡爾乘積
//行的右表部分每個欄位都用NUll填充
結果:
1 a11111 a111111 1 b11111 01
1 a11111 a111111 1 b11111 02
2 a22222 a222222 2 b22222 01
2 a22222 a222222 2 b22222 02
3 a33333 a333333 NULL NULL NULL
select * from a_test a right join b_test b on a.id = b.id
//是在inner join的結果集上加上右面表中沒被選上的不相等的記錄,不包含於笛卡爾乘積
//行的左表部分每個欄位都用NUll填充
1 a11111 a111111 1 b11111 01
1 a11111 a111111 1 b11111 02
2 a22222 a222222 2 b22222 01
2 a22222 a222222 2 b22222 02
NULL NULL NULL 4 b44444 01
select * from a_test a full outer join b_test b on a.id = b.id
//是在inner join的結果集上加上左、右兩面表中沒被選上的不相等的記錄,不包含於笛卡爾乘積
//行的右、左表兩部分每個欄位都用NUll填充
1 a11111 a111111 1 b11111 01
1 a11111 a111111 1 b11111 02
2 a22222 a222222 2 b22222 01
2 a22222 a222222 2 b22222 02
NULL NULL NULL 4 b44444 01
3 a33333 a333333 NULL NULL NULL

F. SQL語句查詢出現笛卡爾怎麼辦

兩表連接如果要避免返回笛卡爾積,必須確保至少一方表是唯一的,否則在能查到記錄的情況下,不論哪一種連接方式一定會返回笛卡爾積記錄集的。
我們可以利用主鍵、唯一索引、distinct關鍵字和分組等手段來確保連接是一對多或一對一的,這樣就可以防止笛卡爾積發生。具體的實現方法要根據數據結構和查詢要求才能給出,可以說是千變萬化的,需要具體問題具體分析解決。

G. SQL語言如何把A表的一列與B表建立笛卡爾乘積

使用交叉連接產生笛卡爾乘積
select
*
from
A
cross
join
B
或不使用任何連接條件,也可產生笛卡爾乘積
select
*
from
A,B
笛卡爾乘積與列無關,如果你想顯示某幾列,就在select後面指定相應的列名即可.
補充:
用A表的某列與B表做笛卡爾積,道理是一樣的,你可以把該列看做是一個表源.如:
select
*
from
(select
distinct
某列
from
A)
C
cross
join
B

H. sql 笛卡爾積問題

select * from b bb where bb.id not in (select * from a,b where a.id=b.id);
思路:
寫個子查詢 把a和b中都有的數據查出來(select * from a,b where a.id=b.id) 然後排除
多看看查詢以及關聯查詢 子查詢的原理 就明白了

I. 2個表的笛卡爾積怎麼用SQL語句表示

SELECT A.*, B.*
FROM A, B
-- 不加WHERE條件,就是笛卡爾積