2011-02-24 55 views
0

我有以下結構一個MDB表:如何比較一個mdb表中的兩行?

  • 字段1字段2字段3字段4
  • 一...
  • 乙...

我嘗試使用查詢列表結果集中行A和B的所有不同字段:

SELECT * From Table1 
WHERE Field1 = 'A' 
UNION 
SELECT * From Table1 
WHERE Field1 = 'B'; 

但是,此查詢h作爲兩個問題:

  1. 它列出所有的領域,包括 相同的細胞,具有大的表

  2. 它給出了一個錯誤消息:太 許多領域中定義。

我怎麼能解決這些問題?

+0

所以你想只有選定行中所有字段的唯一值?表中有幾個字段? – rene 2011-02-24 10:19:03

+0

@Oded謝謝你的回答。其實我只想看到選定行中具有不同值的字段。表中有195個字段。 – JohnMunich 2011-02-24 10:31:23

回答

-1

您可以在full join表格本身上匹配相同的行。然後,如果兩個連接部分之一是null,則可以過濾不匹配。例如:

select * 
from (
     select * 
     from Table1 
     where Field1 = 'A' 
     ) A 
full join 
     (
     select * 
     from Table1 
     where Field1 = 'B' 
     ) B 
on  A.Field2 = B.Field2 
     and A.Field3 = B.Field3 
where A.Field1 is null 
     or B.Field1 is null 

如果您有200個字段,請詢問Access以通過在設計視圖中創建查詢來生成列列表。切換到SQL視圖並複製/粘貼。具有列模式的編輯器(如UltraEdit)將有助於創建查詢。

+0

你可以用'full join'查詢mdb ...嗎? – onedaywhen 2011-02-24 11:35:45

1

根據Field1的值和所需的值來選擇表中所有需要的字段是不是最簡單的?

因此,像這樣:

SELECT field1, field2,...field195 
FROM Table1 
WHERE field1 = 'A' or field1 = 'B' 
GROUP BY field1, field2, ....field195 

這會給你所有行字段1是A或B並且在所選擇的領域之一的差別。

哦,對於group by語句以及SELECT部分​​,確實使用前面提到的編輯模式進行查詢。您可以在結果中添加所需的所有字段(通過在表格中選擇並拖放它們),然後單擊功能區中的「總計」按鈕爲所有字段添加組旁邊的語句。然後,您只需添加Where子句即可完成。


現在,這個問題更加清晰(您想查詢,選擇字段,而不是基於特定要求的記錄),我得我的答案更改爲:

這是不可能。 (直到證明並非);)

據我所知,一個查詢被用於使用例如where子句,從未用於確定哪些字段應當根據一定的繞圈被顯示來選擇記錄。


在這種情況下可能會有幫助的一件事是看數據庫設計。這些表是否正確製作? 假設您有190個僅包含主要數據細節的字段。你可以在另一個表中分開這個,所以你有一個主表和細節表。 詳細資料表格可能看起來像:

ID ID_Main Det_desc Det_value 

這樣,您就可以篩選是兩個主要的值A和B使用像之間的平等所有詳細值:

Select a.det_desc, a.det_value, b.det_value 
(Select Det_desc, det_value 
from tblDetails 
where id_main = a) as A inner join 
(Select Det_desc, det_value 
from tblDetails 
where id_main = a) as B 
on A.det_desc = B.det_desc and A.det_value <> B.det_value 

這個你可以加入如果需要,再次使用主表。

+0

@Yohsoog,A ist一行,B ist另一行。我只想看到兩行中有不同值的字段(A和B)。 – JohnMunich 2011-02-24 12:07:21

+0

@JohnMunich所以如果只有50個字段不同,比較行A到行B,你只想看到這兩個行的50個字段作爲你的查詢結果?其他145或沒有顯示。 – Yoh 2011-02-24 12:29:23

+0

@Yohsoog,確切的。 – JohnMunich 2011-02-24 12:34:18