作为个人教育实验,我正在为想象中的动物收容所建立一个数据库。我对SQL和数据库都很陌生。
任务:在动物收容所数据库中查找宠物的所有者。
我有三张桌子:宠物,主人和宠物爱好者。业主可以拥有一只或多只宠物,宠物可以拥有一个,多个或没有主人。表格如下所示:
Pets
+--------+----------+
| ID | Name |
+--------+----------+
| 1 | Opal |
| 2 | Fuzzy |
| 3 | Angel |
| 4 | Peewee |
| 5 | Spike |
+--------+----------+
Owners
+----------+--------+
| ID | Name |
+----------+--------+
| 1 | Shy |
| 2 | Belle |
| 3 | Velvet |
| 4 | Brilla |
+----------+--------+
Pets2Owners
+----+--------+----------+
| ID | Pet_ID | Owner_ID |
+----+--------+----------+
| 1 | 1 | 2 |
| 2 | 2 | 1 |
| 3 | 3 | 1 |
| 4 | 5 | 3 |
| 5 | 5 | 4 |
+----+--------+----------+
所以,从Pets2Owners,我们看到宠物#3(天使)由所有者#1(Shy女士)拥有,宠物#5(Spike)由所有者#3& 4(Velvet和Brilla)和宠物#4(Peewee)归任何人所有。
我对SQL缺乏经验,我不确定这是否可行,但有没有办法让我提供有关宠物和所有者的所有信息,而不会重复宠物,如下所示:
+--------+--------+
| Pets | Owners |
+--------+--------+
| Opal | Belle |
| Fuzzy | Shy |
| Angel | Shy |
| Peewee | (none) |
| Spike | Velvet |
| | Brilla |
+--------+--------+
基本上,我想要一种方法将来自所有三个表的信息合并为一个。我尝试过使用连接,但是它们给我留下了重复的条目(例如,Spike有两行,其中一行是主人Velvet,另一行是主人Brilla)。
或者,是否可以进行返回特定宠物的所有所有者的查询,如下所示:
Spike's Owners
+--------+
| Owners |
+--------+
| Velvet |
| Brilla |
+--------+
我可以使用它来实现相同的目标,并列出特定宠物的所有所有者(虽然我不确定SQL是否有变量可以让我对变量PetName进行单个查询,然后重复它任意名称)
答案 0 :(得分:0)
SELECT Pets.Name AS Pets, Owners.Name AS Owner
FROM Pets2Owner INNER JOIN Pets ON Pets2Owner.[Pet Id] = Pets.[id]
INNER JOIN Owners ON Pets2Owner.[Owner Id] = Owners.[id]
在你掌握好JOINS之后, 尝试查看Access的参数:)
答案 1 :(得分:0)
您可以使用Allen Browne的函数ConcatRelated()
创建一行,如下所示:
project( test NONE)
cmake_minimum_required(VERSION 3.0)
enable_testing()
set(ARG "-E;sleep;-10")
# set(ARG "-E;sleep -10")
# set(ARG "-E sleep -10")
add_test( NAME test
COMMAND ${CMAKE_COMMAND} -DCMD=cmake -DARG=${ARG} -P test.cmake)
| Spike | Velvet, Brilla |
专为一对多关系而设计。由于您具有多对多,因此您需要一个将宠物ID与所有者名称组合在一起的中间查询:
ConcatRelated()
我调用了此查询SELECT Pets2Owners.Pet_ID, Owners.OwnerName
FROM Pets2Owners INNER JOIN Owners ON Pets2Owners.Owner_ID = Owners.ID;
。
然后Pet_OwnerNames
很简单:
ConcatRelated()
结果:
SELECT Pets.PetName,
ConcatRelated("OwnerName", "Pet_OwnerNames", "Pet_ID = " & ID) AS Owners
FROM Pets;