gpt4 book ai didi

sql - 如何从子查询 SQLite 接收两个值

转载 作者:搜寻专家 更新时间:2023-10-30 20:41:39 24 4
gpt4 key购买 nike

我是一个自学的 SQLite 新手。我有三个表(person、pet、person_pet),.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 person_pet (
person_id INTEGER,
pet_id INTEGER,
);

CREATE TABLE pet (
id INTEGER PRIMARY KEY,
name TEXT,
breed TEXT,
age INTEGER,
dob DATETIME,
purchased_on DATETIME,
parent INTEGER /*Contains the ID of the pet's parent*/
);

我的任务是编写一个查询,可以找到 2004 年之后购买的所有宠物的名称及其主人。关键是根据 purchased_on 列将 person_pet 映射到宠物和 parent 。我尝试做一个返回两个值的子查询,但它不起作用。 (你们中的一些人会说:“显然”。)我的问题是:如果我不能从子查询中返回两个值,我该如何完成这项任务?

我试过这个子查询:

SELECT first_name, name FROM person, pet WHERE person.id pet.id IN(
SELECT person_id FROM person_pet WHERE pet_id IN (
SELECT id FROM pet WHERE purchased_on IN (
SELECT pet.purchased_on
FROM pet, person_pet, person
WHERE person.id = person_pet.person_id AND
pet.id = person_pet.pet_id AND
pet.purchased_on > '2004/01/01 0:0:0 AM'
)
)
SELECT pet_id FROM person_pet WHERE id IN (
SELECT id FROM pet WHERE purchased_on IN (
SELECT pet.purchased_on
FROM pet, person_pet, person
WHERE person.id = person_pet.person_id AND
pet.id = person_pet.pet_id AND
pet.purchased_on > '2004/01/01 0:0:0 AM'
)
)
);

PS:对不起,如果我的问题有点长。

最佳答案

您不需要子查询。您需要加入:

SELECT p.id, p.first_name, p.last_name, p2.id as pet_id, p2.name as pet_name
FROM person as p
INNER JOIN person_pet as pp on pp.person_id = p.id
INNER JOIN pet as p2 on p2.id = pp.pet_id
WHERE
p2.purchased_on > '2004/01/01 0:0:0 AM'

关于sql - 如何从子查询 SQLite 接收两个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17274881/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com