考虑这两个表
1)宠物
---------------
Pet_Type |Bird
---------------
Dog |N
Owl |Y
Eagle |Y
Cat |N
2)customer_pets
------------------
Customer |pet_type
-------------------
Steve | dog, owl
john | owl, eagle
brad | eagle
cooper | cat
Jeff | dog, cat, owl
我想从customer_pets表中查询那些只持有鸟类的客户(第一张表中的bird = y)。上述设置的查询结果将为 - John和brad
由于
答案 0 :(得分:1)
列pet_type的类型是什么? 如果它是varchar(字符串),你可以使用这样的东西:
select * from customer_pets
inner join pets on(customer_pets.pet_type like '%' || pets.pet_type || '%')
where pets.bird = 'N'
答案 1 :(得分:1)
这种数据库结构不合适,会使您的问题变得更难。你不应该在一个领域拥有多个值,比如拥有狗和狗。猫头鹰在一个领域。你需要的是3张桌子,其中一张桌子将是一张桌子,#34; briding"表
表1:客户 此表将保存客户信息,例如:id,name
表2:宠物类型 该表将保存宠物类型,即:id,typename
表3:客户宠物类型 此表将宠物类型映射到客户,即:id,customer_id(此字段是外键,标识此记录分配给哪个客户),pet_type_id(此字段是外键,标识此记录的宠物类型)。
当您查看表3中的记录时,您将看到一个客户ID,您可以在表1中查找该客户ID以查看其客户身份。然后可以在表2中查找宠物类型id以查看它是什么宠物类型。
因此,对于顾客拥有的每种宠物类型,他们将在表3中有1条记录。如果他们有3种宠物类型,他们将有3条记录。例如:
Customers
----------
id name
1 john
2 joseph
3 jingleheimer
Pet Types
------------
id Name
1 Bird
2 Reptile
3 Dinosaur
Customer Pet Types
------------------
id customer_id pet_type_id
1 1 2
2 1 3
3 2 1
4 3 1
5 3 2
6 3 3
这意味着,客户宠物类型中的每条记录
record 1: Customer 1 (John), has pet type 2 (reptile)
record 2: Customer 1 (John), has pet type 3 (dinosaur)
record 3: Customer 2 (Joseph), has pet type 1 (bird)
record 4: Customer 3 (Jingleheimer), has pet type 1 (bird)
record 4: Customer 3 (Jingleheimer), has pet type 2 (reptile)
record 4: Customer 3 (Jingleheimer), has pet type 3 (dinosaur)
答案 2 :(得分:0)
你可以这样试试
Select customer
from customer_pet
where customer_pet in (select pet from pets where bird='Y')
答案 3 :(得分:0)
您可以将exists
与一样使用谓词:
select cp.*
from customer_pets cp
where not exists (select 1
from Pets p
where cp.pet_type LIKE CONCAT ('%', p.pet_type ,'%') and
p.Bird = 'N'
);
<强>输出强>
| Customer | pet_type |
|----------|------------|
| john | owl, eagle |
| brad | eagle |
答案 4 :(得分:0)
您需要阅读有关第1,第2,第3表格规范化的内容。每只宠物都应该有自己的列类型。然后,您使用联接返回所需的类型。
在这里阅读关于规范化的内容: https://www.studytonight.com/dbms/database-normalization.php
在这里阅读关于表连接的内容: