2014-02-11 20 views
0

我有兩個表:sectionssamples。我剛剛被要求添加能夠看到任何部分是否有與他們相關的樣本。如何找到一個表中的哪個字段匹配基於另一個的標準

爲了做到這一點,我需要從samples表使用的字段JobIDSectionNumber和匹配他們對sections表相同的字段。

我還需要決定是否應在sections中創建一個名爲hasSamples的新字段並對其進行維護。

的樣本數據:

samples table: `Job | ID | SectionNumber | Type | Tests` 
     samples: `J1302, JC310, 2, Bag, Stress` 

部分表:Job | ID | SectionNumber | Depth

sections: `J1301, JD493, 1, 128` 
      `J1302, JC310, 2, 50` 

期望中的結果可能是這樣的:

`Job | ID | SectionNumber | Samples` `J1302, JC310, 2, 1` 

任何建議表示讚賞。

+0

請提供樣本數據,所需結果以及您爲解決此問題所做的任何嘗試。 –

+0

更多建議:請說明部分和樣本之間的關係是1對1,1對多還是多對多。你提到了一個hasSamples部分。這似乎意味着一個部分有很多樣本。如果這是真的,我給你的查詢將爲每個樣本返回一行,對於沒有樣本的任何部分也會返回一行。您可能想要GROUP BY部分或其他東西來合併。沒有更多信息很難知道。 –

+0

@GordonLinoff我已經更新了這個問題。 – Gn13l

回答

0
SELECT * FROM sections se 
LEFT JOIN samples sa ON sa.Job = se.Job AND sa.ID = se.ID, and sa.SectionNumber = sel.SectionNumber 
WHERE sa.ID IS NOT NULL 

在你最初的設計,有可能是沒有令人信服的理由有「計算」或「緩存」領域,如hasSamples,因爲JOIN顯然是微不足道的(假設你擁有所有正確的索引和外國的關係正確定義)。但是,如果您在某個時候決定通過避免超頻JOIN來幫助提高性能,那麼沒有理由不能添加該列。

+0

我想我描述這個問題做得不好。還有另一列是代理鍵RID。可以有幾個部分共享相同的作業,ID,SectionNumber。運行查詢會得到許多結果,因爲它與多個部分匹配。我只需要匹配一次。換句話說,我想得到一個結果,使得對於每個唯一的Job,ID,SectionNumber,它們都給出了具有匹配的Job,ID,SectionNumber的樣本數。 – Gn13l

+0

我實際上在解決方案中使用了非常類似的查詢。不同之處在於我只需要兩個表中的鍵。我嘗試使用內連接,但左連接變成我所需要的。我也需要包含NULL的結果,所以我放棄了WHERE子句。 – Gn13l

+0

您可能想要GROUP BY部分或其他東西來整合。 –

相關問題