2014-10-27 52 views
2

我在我的數據庫中有兩個表:AppropriateForAquariumModel,如下所示。他們共享三個鍵 - 水族箱類型,鹽度和體積。我試圖找到所有適用於多種物種的水族箱模型。我碰到試圖正確計數AppropriateFor中的主元組,然後將它與AquariumModel表一起加入。MySQL - 列出多個屬性

的AppropriateFor表有四列:speciesName,aquariumType,鹽度,容積:

RED-BELLIED PACU    AGGRESSIVE FRESHWATER 300 
GOLDEN MORAY EEL   AGGRESSIVE MARINE  25000 
NURSE SHARK     AGGRESSIVE MARINE  25000 
COMMON TOADFISH    COMMUNITY BRACKISH 150 
DRAGON GOBY     COMMUNITY BRACKISH  150 
BRONZE CORYDORAS   COMMUNITY FRESHWATER 250 
COMMON DISCUS    COMMUNITY FRESHWATER 250 
SPOTTED RAPHAEL    COMMUNITY FRESHWATER 250 
UPSIDE-DOWN CATFISH   COMMUNITY FRESHWATER 250 
BLUESPOTTED ANGELFISH  COMMUNITY MARINE  50000 
CHALK BASS     COMMUNITY MARINE  50000 
FLAME ANGELFISH    COMMUNITY MARINE  50000 
ORIENTAL SWEETLIPS   COMMUNITY MARINE  50000 
ROUND STINGRAY    COMMUNITY MARINE  50000 
ROYAL ANGELFISH    COMMUNITY MARINE  50000 
TEIRA BATFISH    COMMUNITY MARINE  50000 
BARTLETTS ANTHIAS   REEF  MARINE  75000 
BELLUS ANGELFISH   REEF  MARINE  75000 
CHALK BASS     REEF  MARINE  75000 
COPPERBANDED BUTTERFLYFISH REEF  MARINE  75000 
MANDARINFISH     REEF  MARINE  75000 
COMMON TOADFISH    SPECIES  BRACKISH 100 
GREEN SPOTTED PUFFER  SPECIES  BRACKISH 100 
REEDFISH     SPECIES  BRACKISH  100 
ELECTRIC EEL     SPECIES  FRESHWATER 500 
ORNATE BICHIR    SPECIES  FRESHWATER 500 
REEDFISH     SPECIES  FRESHWATER 500 
BRAZILIAN SEAHORSE   SPECIES  MARINE  10000 

AquariumModel有四列,以及:aquariumType,鹽度,數量,價格:

AGGRESSIVE BRACKISH 125 200 
AGGRESSIVE FRESHWATER 300 500 
AGGRESSIVE MARINE  25000 4500 
COMMUNITY BRACKISH 150 250 
COMMUNITY FRESHWATER 250 400 
COMMUNITY MARINE  50000 7000 
REEF  MARINE  75000 10000 
SPECIES  BRACKISH 100 150 
SPECIES  FRESHWATER 500 800 
SPECIES  MARINE  10000 3000 
+0

OP,我知道我的答案已被接受,但我爲您添加了一個SQL小提琴以及對您的數據庫設計的評論。 – AdamMc331 2014-10-27 01:30:51

回答

3

我想您可以先將所需的兩個表格連接在一起,然後按照以下方式開始:

SELECT * 
FROM aquariummodel am 
JOIN appropriatefor af ON am.aquariumtype = af.aquariumtype AND am.salinity = af.salinity AND am.volume = af.volume; 

然後,你要組在水族館所有類型的值,並使用條件計數大於1,所以我會再更改查詢到這一點:

SELECT am.*, COUNT(*) AS numFishAppropriateFor 
FROM aquariummodel am 
JOIN appropriatefor af ON am.aquariumtype = af.aquariumtype AND am.salinity = af.salinity AND am.volume = af.volume 
GROUP BY am.aquariumtype, am.salinity, am.volume 
HAVING COUNT(*) > 1; 

編輯 這裏是一個SQL Fiddle來證明它的工作原理。

如果可以的話,我想評論一下你的數據庫的設計。

在適當的表中,您有幾個從aquariummodel表中重複的列。我會添加一個主鍵到你的aquariummodel表(如auto_increment id),並在適當的表中使用該id。這樣,水族館模型將有5列,但適合可以減少到兩列:speciesnameaquariummodel_id。只是一個建議,但。

+0

使用SQL Fiddle立即測試。只需要時間輸入數據。 – AdamMc331 2014-10-27 01:08:29