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

标签 sql database sqlite

我是一个自学的 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/

相关文章:

c# - 从 SqlDataReader 填充通用列表

python - 按当前时间查询(postgres、psycopg2、python)

mysql - 将左连接写成子查询

javascript - React Native - 不变违规 - 试图获取超出范围索引的框架

sql-server - 以兼容级别 80 运行 SQL Server 2005 数据库是否会对性能产生负面影响?

mysql - 使用 NOT IN() 查询的效率如何?

android - 如何在sqlite数据库中添加日期

Android:升级数据库版本并添加新表

mysql - PhpMyAdmin 搜索返回行但 Sql 返回 null

SQLite - 存储多个值