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是如何工作的。非常感谢