MySQL学校项目-加入问题

MySQL学校项目-加入问题,mysql,join,Mysql,Join,我正在做一个学校项目,我们的任务是为一家建筑公司创建一个数据库。我已经创建了数据库并插入了所有数据。 但我在解决一个需要的问题时遇到了困难 请注意,所有列和表名均为丹麦语 我需要创建一个查询,告诉我哪个部门(表Afdelinger.id)只销售一层楼的房子(表HusType.Etageantal)。只有一个部门能做到这一点,那就是07部门(AfdId) 无论我如何创建查询,我总是得到所有销售一层楼房屋的部门,或者什么都没有,但是这些部门也销售两层楼房屋。所以我的查询应该只输出afdid07。 我

我正在做一个学校项目,我们的任务是为一家建筑公司创建一个数据库。我已经创建了数据库并插入了所有数据。 但我在解决一个需要的问题时遇到了困难

请注意,所有列和表名均为丹麦语

我需要创建一个查询,告诉我哪个部门(表
Afdelinger.id
)只销售一层楼的房子(表
HusType.Etageantal
)。只有一个部门能做到这一点,那就是07部门(AfdId)

无论我如何创建查询,我总是得到所有销售一层楼房屋的部门,或者什么都没有,但是这些部门也销售两层楼房屋。所以我的查询应该只输出afdid07。 我尝试了这些查询,但没有给出正确的结果

select etageantal, id, udbyder.ModelNr from hustype
inner join udbyder
on  id = id
where Etageantal like 1 = Etageantal not like 2
group by id;

select * from hustype
left join udbyder on hustype.modelnr = udbyder.modelnr
where Etageantal like 1
union
select * from hustype
right outer join udbyder on hustype.modelnr = udbyder.modelnr
where Etageantal like 1
order by id;
Udbyder
HusType
Afdelinger
的连接表

Create table Afdelinger(
AfdId int not null,
Navn varchar(45) not null,
PostNr int not null,
primary key(AfdId),
foreign key(PostNr) references PostNummer(PostNr)
) ENGINE=INNODB;


Create Table HusType(
ModelNr int(3) not null,
ModelNavn varchar(10) not null,
Kvm int(3) not null,
Etageantal int(1) not null, 
primary key(ModelNr)
) ENGINE=INNODB;


Create table Udbyder(
HusPrisAfd decimal not null,
Id int not null,
ModelNr int(3) not null,
primary key(HusPrisAfd, Id),
unique(HusPrisAfd),
foreign key(Id) references Afdelinger(AfdId),
foreign key(ModelNr) references HusType(ModelNr)
) ENGINE=INNODB;
这是我的数据

表名=Afdelinger

+-------+---------------------+--------+
| AfdId | Navn                | PostNr |
+-------+---------------------+--------+
|     1 | Herning             |   7400 |
|     2 | Brønderslev         |   9800 |
|     3 | Haderslev           |   6100 |
|     4 | Højbjerg            |   8270 |
|     5 | Brabrand            |   8220 |
|     6 | Fyn                 |   5000 |
|     7 | Sjælland og Øerne   |   4000 |
+-------+---------------------+--------+
Tbl名称=Udbyder

+------------+----+---------+
| HusPrisAfd | Id | ModelNr |
+------------+----+---------+
|    1175000 |  2 |     102 |
|    1250000 |  1 |     100 |
|    1275000 |  2 |     103 |
|    1350000 |  1 |     101 |
|    1375000 |  2 |     104 |
|    1450000 |  1 |     102 |
|    1550000 |  1 |     103 |
|    1575000 |  3 |     100 |
|    1600000 |  3 |     102 |
|    1650000 |  2 |     100 |
|    1675000 |  3 |     101 |
|    1700000 |  3 |     103 |
|    1750000 |  2 |     101 |
|    1800000 |  3 |     104 |
|    1941666 |  4 |     102 |
|    1978508 |  4 |     103 |
|    2000000 |  4 |     100 |
|    2015350 |  5 |     101 |
|    2052192 |  5 |     102 |
|    2089035 |  5 |     103 |
|    2100000 |  4 |     101 |
|    2125877 |  5 |     104 |
|    2199561 |  6 |     100 |
|    2236403 |  6 |     101 |
|    2273245 |  6 |     102 |
|    2310087 |  6 |     103 |
|    2346929 |  6 |     104 |
|    2420614 |  7 |     102 |
+------------+----+---------+
Tbl名称=Hustype

+---------+-----------+-----+------------+
| ModelNr | ModelNavn | Kvm | Etageantal |
+---------+-----------+-----+------------+
|     100 | H-Huset   | 167 |          1 |
|     101 | U-Huset   | 176 |          1 |
|     102 | L-Huser   | 193 |          1 |
|     103 | Skagen    | 212 |          2 |
|     104 | Funkis    | 242 |          2 |
+---------+-----------+-----+------------+

您将需要一个子查询来完成此操作。首先,你需要让所有销售一层楼房屋的部门都参与进来。第一次查询几乎就完成了,但没有正确使用内部联接语法。您应该在hustype.ModelNr=udbyder.ModelNr上使用
,因为
udbyder
表中的
ModelNr
是根据表定义引用
hustype
表中的
ModelNr
的外键。以下是正确的查询:

SELECT hustype.etageantal, udbyder.id, udbyder.ModelNr 
FROM hustype
INNER JOIN udbyder
ON hustype.ModelNr = udbyder.ModelNr
WHERE hustype.Etageantal = 1
通过上面的查询,您还将获得销售一层和两层房屋的部门。下一步是获得出售两层楼房屋的部门的id。以下查询将执行此操作:

SELECT udbyder.id
FROM hustype
INNER JOIN udbyder
ON hustype.ModelNr = udbyder.ModelNr
WHERE Etageantal <> 1 

SQLFiddle演示:

您需要一个子查询来完成此操作。首先,你需要让所有销售一层楼房屋的部门都参与进来。第一次查询几乎就完成了,但没有正确使用内部联接语法。您应该在hustype.ModelNr=udbyder.ModelNr
上使用
,因为
udbyder
表中的
ModelNr
是根据表定义引用
hustype
表中的
ModelNr
的外键。以下是正确的查询:

SELECT hustype.etageantal, udbyder.id, udbyder.ModelNr 
FROM hustype
INNER JOIN udbyder
ON hustype.ModelNr = udbyder.ModelNr
WHERE hustype.Etageantal = 1
通过上面的查询,您还将获得销售一层和两层房屋的部门。下一步是获得出售两层楼房屋的部门的id。以下查询将执行此操作:

SELECT udbyder.id
FROM hustype
INNER JOIN udbyder
ON hustype.ModelNr = udbyder.ModelNr
WHERE Etageantal <> 1 

SQLFIDLE Demo:

您刚刚帮我节省了一天时间,并帮助我更好地了解联接的工作原理。非常感谢你救了我一天,帮助我更好地理解了joins是如何工作的。非常感谢