2010-07-23 28 views
1

函數Min()或Max()可能會破壞記錄的完整性嗎?就拿查詢我最近製作的情況下:可以使用sql函數(如min()或max()破壞記錄的完整性

選擇帳戶,MIN(手機),MIN(chargeid),MIN(locationid)FROM import1 GROUP BY帳戶,電話

有沒有可能我混我現場數據無意中變成新記錄?如果我將一個Min改爲Max,該怎麼辦?如果我選擇了,我可以破壞記錄的完整性嗎?

感謝, 多諾萬

回答

1

我相信他的問題是,如果以下數據存在

Account Phone  ChargeId LocationId 
1  111-1111 6   8 
2  111-1111 7   7 
2  111-1111 8   6 

將其返回2,111-1111, 7,6(來自chargeId(2)的7個和來自LocationId(3)的6個)。

如果這就是你要求的,那麼是的。它會毀了你的結果。

+0

這就是爲什麼我試圖使用使用ROW_NUMBER()(來自您以前的問題)建立的主鍵。您是否能夠將數據推送到指定了IDENTITY列的新表中? – 2010-07-23 01:06:42

+0

crud。這就是我所害怕的。 – Donovan 2010-07-23 01:06:53

+0

是的。如果需要,我可以。我可以臨時修改表格以包含行號作爲關鍵字。我將無法將它包含在查詢中,但是我可以在運行select語句之前將表獲取到具有唯一鍵的點。 – Donovan 2010-07-23 01:09:30

7

你實際上並沒有改變在查詢數據時,你只選擇或查看它。

除非您執行UPDATE,INSERT或DELETE或調用存儲過程,否則不會更改數據。

+0

確實如此,在這種情況下,選擇正在變成一個全新的數據集。當使用視覺狐狸時,你可以把選擇語句變成一張全新的表格,這就是我擔心的原因。 – Donovan 2010-07-23 01:00:17

3

我不確定你的意思是破壞記錄的完整性,但調用MIN或MAX函數沒有任何問題。這是一種非常普遍的查詢。

您不應該假設結果集中一行中的所有值都來自原始表中的同一行。這些值可以來自不同的行。例如,如果在你的表中的數據是這樣的:

 
account phone chargeid locationid 
123  456 10  30 
123  456 40  20 

那麼結果會是這樣:

 
account phone MIN(chargeid) MIN(locationid) 
123  456 10   20 

的「10」來自第一行和「20」來自第二排。

此外,您在手機上使用MIN似乎沒有必要。你應該選擇這個領域,因爲它是該組的部分是:

SELECT account, phone, MIN(chargeid), MIN(locationid) 
FROM import1 
GROUP BY account, phone 
+0

我想確保我不會混合來自該選擇的多行的字段。我正在創建一個基於該聲明的新表格,並且我想確保它是從 – Donovan 2010-07-23 01:02:07

+0

創建的數據的準確表示。您在Min(電話)上的權利並未用作分組的一部分,當我收錄它時,我錯過了刪除MIN。 – Donovan 2010-07-23 01:03:16

+0

@Donovan:您可能會混合來自多行的字段。看到我更新的答案,我舉了一個例子。 – 2010-07-23 01:05:21