我正在经历“艰苦学习SQL”,目前正在练习13。
我被困在我们必须要做的部分
编写一个查询,以查找所有2004年以后购买的宠物及其主人的所有名称。其关键是根据“ purchase_on”列将person_pet映射到宠物和父母。
我的桌子看起来像这样
sqlite> select * from person ;
id first_name last_name age dead phone_number salary dob
---------- ---------- ---------- ---------- ---------- ------------ ---------- ----------
0 john doe 20 0 9929 123123.0 2015-12-09
1 foo bar 25 0 12 123123.0 2004-12-11
2 michal jordan 19 0 12 123123.0 2005-12-11
3 tom ford 30 0 12 123123.0 2002-12-11
和
sqlite> select * from pet ;
id name breed age dead dob parent_id
---------- ---------- ---------- ---------- ---------- ---------- ----------
0 fluffy Unicorn 5 0 2012-02-01
1 quora social net 10 0 2010-02-01
2 Goldie German She 6 0 2009-02-01
3 boxer golden ret 3 0 2007-02-01
4 naman kutta 10 1 2011-02-01
5 hari ohk 7 0 2015-02-01
sqlite> select * from person_pet ;
person_id pet_id purchased_on
---------- ---------- ------------
2 2 2002-03-30
2 3 2001-04-30
2 4 2005-04-30
2 5 2003-04-30
3 1 2006-04-30
3 4 2005-04-30
我schema
看起来像这样
sqlite> .schema
CREATE TABLE person(
id INTEGER PRIMARY KEY,
first_name TEXT,
last_name TEXT,
age INTEGER
, dead INTEGER, phone_number INTEGER, salary FLOAT, dob DATETIME);
CREATE TABLE pet(
id INTEGER PRIMARY KEY,
name TEXT,
breed TEXT,
age INTEGER,
dead INTEGER
, dob DATETIME, parent_id INTEGER);
CREATE TABLE person_pet(
person_id INTEGER,
pet_id INTEGER
, purchased_on DATETIME);
CREATE TABLE cars(
id INTEGER PRIMARY KEY,
car_name TEXT
);
我尝试过的
我能够得到person_id
和pet_id
当年“2004”后,带来了与查询
sqlite> select person_id, pet_id, purchased_on from person_pet
...> where purchased_on > "2004-01-01" ;
person_id pet_id purchased_on
---------- ---------- ------------
2 4 2005-04-30
3 1 2006-04-30
3 4 2005-04-30
我现在应该如何继续列出名字呢?
这是我第一次使用SQL,因此非常感谢您的帮助。被困了一段时间。
编辑:
我知道这可以使用完成,joins
但是直到练习13才涉及joins
。
正如@vkp在评论中所要求的那样,in
到现在为止已经涵盖了。
要将ID替换为其关联的名称,可以使用相关的子查询:
select (select first_name
from person
where id = person_pet.person_id),
(select name
from pet
where id = person_pet.pet_id),
purchased_on
from person_pet
where purchased_on >= '2005';
(当您需要从同一个表中获取多个列(例如,名字和姓氏)时,效率不如联接。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句