SQL,选择只具有特定值类型的行

时间:2018-05-18 19:02:18

标签: sql

考虑这两个表

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

由于

5 个答案:

答案 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一样使用谓词:

SQL DEMO

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

在这里阅读关于表连接的内容:

https://www.w3schools.com/SQL/sql_join_inner.asp