可能之前已經詢問過,但我找不到答案。獲取兩個字段值的唯一組合
表數據有兩列:
Source Dest
1 2
1 2
2 1
3 1
我試圖想出一個MS Access 2003中的SQL查詢將返回:
1 2
3 1
但都無濟於事。請幫忙!
更新:確切地說,我試圖排除2,1,因爲1,2已包括在內。我只需要序列無關緊要的獨特組合。
可能之前已經詢問過,但我找不到答案。獲取兩個字段值的唯一組合
表數據有兩列:
Source Dest
1 2
1 2
2 1
3 1
我試圖想出一個MS Access 2003中的SQL查詢將返回:
1 2
3 1
但都無濟於事。請幫忙!
更新:確切地說,我試圖排除2,1,因爲1,2已包括在內。我只需要序列無關緊要的獨特組合。
對於微軟的Access,你可以嘗試
SELECT DISTINCT
*
FROM Table1 tM
WHERE NOT EXISTS(SELECT 1 FROM Table1 t WHERE tM.Source = t.Dest AND tM.Dest = t.Source AND tm.Source > t.Source)
編輯:
實例與表中的數據,這是相同的......
SELECT DISTINCT
*
FROM Data tM
WHERE NOT EXISTS(SELECT 1 FROM Data t WHERE tM.Source = t.Dest AND tM.Dest = t.Source AND tm.Source > t.Source)
或(尼斯和訪問格式化...)
SELECT DISTINCT *
FROM Data AS tM
WHERE (((Exists (SELECT 1 FROM Data t WHERE tM.Source = t.Dest AND tM.Dest = t.Source AND tm.Source > t.Source))=False));
第一次修改返回1,2; 1,2; 3,1這顯然是不正確的。 –
我只是在MS Access上運行它,它返回1,2 3,1。你測試過了嗎?你是否加入了** DISTINCT **? –
Astander,一對一複製它,只是將數據替換爲Table1 –
使用此查詢:
SELECT distinct * from tabval ;
這不是要求的... –
消除重複「選擇不同的」比更容易「分組依據」:
select distinct source,dest from data;
編輯:我現在是你想得見獨特的組合(不包括1,2和2,1)。你可以這樣做:
select distinct source,dest from data
minus
select dest,source from data where source < dest
「減號」翻轉訂單,並消除您已經有匹配的情況; 「其中源< dest」不讓你同時刪除(1,2)和(2,1)
將返回1,2; 2,1; 3; 1 - 2,1應排除 –
你不能在MS Access中使用減號,因此問題:) –
你的問題被錯誤地提出。 「獨特的組合」就是你的所有記錄。但我認爲你的意思是每個來源一行。所以它是:
SELECT *
FROM tab t1
WHERE t1.Dest IN
(
SELECT TOP 1 DISTINCT t2.Dest
FROM tab t2
WHERE t1.Source = t2.Source
)
在MS Access 2003中不起作用,抱怨IN子句。順便說一下,以防萬一在問題中有一個期望的輸出樣本來消除可能的不明確性。 –
此查詢將返回所需的行,但我不知道如何在ms訪問sql中寫入。 – Andrey
Andrey,道歉,我在問題中澄清它必須是Access 2003. –
SELECT t1.* FROM
(SELECT
LEAST(Source, Dest) AS min_val,
GREATEST(Source, Dest) AS max_val
FROM table_name) AS t1
GROUP BY t1.min_val, t1.max_val
將在MySQL返回
1, 2
1, 3
。
2 - 1也是唯一的,是否應該排除? –
爲什麼2,1會被遺漏?它包含1,2包含嗎?那麼你怎麼決定使用1,2還是2,1? –
2,1應該被排除,這就是問題 –