兩個看似相同,結果不同的SQL邏輯

2022-05-27 07:33:10 字數 665 閱讀 8570

一朋友問我的,看著挺有意思,記錄一下:

表item1,裡面有上面三個字段,一共10條資料,接下來有兩個相似的sql語句得到了不一樣的查詢結果。

表資料如下:

兩條sql及查詢結果:

我的理解答:

sql1 迴圈一遍,i表拿出每一列值去和j表相同列的平均值做比較

比如,i表拿出i.i_item_sk=4的列,i.i_current_price=1.35,滿足 i_category=children的行有三個,三個i_current_price取平均值是4.68,然後這個平均值的1.2倍和i.i_current_price=1.35比較大小判斷是否滿足條件。

sql2 迴圈兩遍,先是子查詢裡i和j做笛卡爾積得出集合k的平均值,然後i表拿出每一列去和k的平均值做比較

第二個sql較為好理解,先是子查詢算出兩個表的關聯結果求平均值,其實就乙個平均值,然後i表中的每一列i.i_current_price和這個平均值的運算作比較,判斷是否滿足條件。

C 獲取兩個集合中相同的和不同的結果

有乙個需求,伺服器根據客戶端傳過來的乙個陣列,找到資料庫中不包含該陣列資料的所有資料。本來是想用兩個for迴圈比較的,然後覺得太臃腫,於是去萬能的google看了下,果然,有更簡潔的寫法。遂記錄之。static void main string args int b ienumerable en a...

grep輸出兩個檔案相同或者不同的行

root bogon home sudley cat 1.list 1122 3344 root bogon home sudley cat 2.list 33333 4455 66 root bogon home sudley grep wf 1.list 2.list 輸出兩個檔案相同行 334...

按行合併兩個sql的查詢結果

union all join 是平行合併 為水平連線 union all 是垂直合併 是將兩個結果聯結起來 union all 的語法 sql 語句 1 union all sql 語句 2 union 語法跟union all 一樣 union 會排除重覆記錄 效果類似 distinct 合併資料...