假设我们有以下架构:
CREATE TABLE customers(
id INTEGER PRIMARY KEY,
name TEXT
);
CREATE TABLE items(
id INTEGER PRIMARY KEY,
name TEXT
);
CREATE TABLE customers_items(
customerid INTEGER,
itemid INTEGER,
FOREIGN KEY(customerid) REFERENCES customers(id),
FOREIGN KEY(itemid) REFERENCES items(id)
);
现在我们插入一些示例数据:
INSERT INTO customers(name) VALUES ('John');
INSERT INTO customers(name) VALUES ('Jane');
INSERT INTO items(name) VALUES ('duck');
INSERT INTO items(name) VALUES ('cake');
假设 John 和 Jane 的 id 为 1 和 2,duck 和 cake 的 id 也为 1 和 2。让我们给 John 一个鸭子,给 Jane 一个鸭子和一个蛋糕。
INSERT INTO customers_items(customerid, itemid) VALUES (1, 1);
INSERT INTO customers_items(customerid, itemid) VALUES (2, 1);
INSERT INTO customers_items(customerid, itemid) VALUES (2, 2);
现在,我想做的是运行两种类型的查询:
- 选择同时拥有鸭子和蛋糕的客户的姓名(应仅返回“Jane”)。
- 选择有鸭子但没有蛋糕的客户的姓名(应仅返回“约翰”)。