2014-10-27 55 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