我相信“相交”是我的問題的解決方案,但在 VBA 中實作它卻讓我很失望。
我有兩張桌子:
- 專案,為了我們的目的,單列 [ItemNumber]
- ItemProperties,2 列 [ItemNumber],[ItemProperty]
每個專案至少(不少于)2 個屬性 [ItemProperty] 和多達 700 個屬性。
對于 Items 表中的每個 Item,我想將它與 Item Table 中的每個其他 Item 進行比較,看看它們是否有任何共同的屬性。
我的想法是使用:
使用兩個回圈讀取 Items。第一個回圈選擇當前專案 [FristItem],第二個回圈選擇我要與之比較的專案 [SecondItem]
Select ItemProperty from ItemProperties where ItemNumber = FirstItem
Intersect
Select ItemProperty from ItemProperties where ItemNumber = SecondItem
那,我相信會給我 FirstItem 和 SecondItem 之間的共同屬性。
但是 MS Access VBA 沒有實作 Intersect。我看到的討論談論如何使用 INNER JOIN 來完成同樣的事情,但總是使用 2 個不同的表作為源。當我從一個表中撰寫它時,我似乎在 ON 部分得到了模棱兩可的標識(雙方相同的識別符號..)
我是 SQL 的相對初學者,我確信答案簡單明了,但我今天只是想念它。最后,我需要根據每對共有屬性的數量來做一些事情,但我認為我已經解決了這部分問題。只需要 Intersect / INNER JOIN 的幫助。
謝謝任何能給我指出正確方向的人
戴夫
uj5u.com熱心網友回復:
你可以做一個GROUP BY。用于HAVING確保 FirstItem 和 SecondItem 都在那里。
Select ItemProperty
from ItemProperties
where ItemNumber in (FirstItem, SecondItem)
having count(distinct ItemNumber) > 1
自加入替代方案:
select distinct i1.ItemProperty
from ItemProperties i1
join ItemProperties i2
on i1.ItemProperty = i2.ItemProperty
where i1.ItemNumber = FirstItem
and i2.ItemNumber = SecondItem
uj5u.com熱心網友回復:
您還可以使用:這個 SQL(或類似的):
select IPA.ItemName, IPA.ItemProperty, IPB.ItemName as CommonWithThisItem
from ItemProperties as IPA
inner join
ItemProperties as IPB
on IPA.ItemName>IPB.ItemName
and IPA.ItemProperty=IPB.ItemProperty
使用的大于標準強制只回傳兩個組合中的一個(即,具有 comoon 屬性的專案名稱是 ItemA 和 ItemB;通常 ItemA、ItemB 和 ItemB,ItemA 將是您查詢的有效回傳)。如果這不是您想要的,請將>條件更改為<>
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/424975.html
上一篇:連接組中的不同值
