2014-03-27 72 views
0

我想列出包含chorusEffectPedaldelayEffectPedal的所有吉他裝備。MySQL:使用交集計算衆多對象的實例數

我有一個guitarRig數據庫。在該數據庫中,parts(即,例如amplifiercabinet,microphone,guitarType,guitarStringType,patchCord,effectsPedal等)包括吉他裝備。吉他鑽機可以有很多零件,而零件可以屬於許多吉他鑽機。

這裏是我的表:

Table GuitarRig: 
    name 
    numberofParts 

Table Part: 
    name 
    guitarRig references GuitarRig(name) 
    product references Product(name) 

Table Product: 
    name 
    part references Part(name) 
    barcodeNumber 

到目前爲止,我已經是這樣的:

SELECT * 
    FROM(
     SELECT name 
     FROM Part 
     WHERE name = 'chorusEffectPedal') INTERSECT 
    (SELECT recipeName 
    FROM 
    WHERE name = 'delayEffectPedal'); 

我意識到相交不是關鍵字聲明瞭(即不存在INTERSECT函數存在),但是這是我想要使用的算法。

我不知道我是否在右腳,但對我來說這似乎是一個好的開始。

我還應該注意,雖然我發現在我之前還有其他關於INTERSECT的問題,但我覺得他們並不適用於這種情況。

回答

0

是Part.guitarRig與GuitarRig.name相同?

那麼很簡單:

select cep.guitarRig as guitarRig from 
(select guitarRig from Part where name='chorusEffectPedal') cep join 
(select guitarRig from Part where name='delayEffectPedal') dep 
on cep.guitarRig=dep.guitarRig; 

附:關於參考文獻作爲列規範的一部分,MySQL的似乎沒有使用它們:

MySQL不支持或識別「內聯參考規範」 (如SQL標準中定義),其中引用的定義 列規範的一部分。僅當作爲單獨的FOREIGN KEY規範的一部分指定時,MySQL才接受REFERENCES條款 。

源:http://dev.mysql.com/doc/refman/5.6/en/create-table.html

+0

我在列規格以上使用的'references'字都沒有任何代碼;他們只是爲了直觀的理解,讓我的數據庫很容易被那些花時間閱讀我的文章的人理解。您的解決方案完美無瑕。謝謝! – Phazall