【发布时间】:2019-06-04 16:59:14
【问题描述】:
我有两个表 user 和 product 具有一对多关系(一个 user 可能有多个 products)。
我想创建一个查询来获取所有既有橙子又有香蕉的users。在下面的示例中,这将是 john 和 leeroy。
如何制定我的查询来做到这一点?
只有一个条件我会去:
SELECT * FROM "user"
INNER JOIN "product" ON "product"."fk_user" = "user"."id"
WHERE "product"."product" = 'banana';
user 表
╔════╦═════════╗
║ id ║ name ║
╠════╬═════════╣
║ 1 ║ michael ║
╠════╬═════════╣
║ 2 ║ john ║
╠════╬═════════╣
║ 3 ║ leeroy ║
╠════╬═════════╣
║ 4 ║ tony ║
╚════╩═════════╝
product 表
╔═════════╦═════════╗
║ product ║ fk_user ║
╠═════════╬═════════╣
║ orange ║ 1 ║
╠═════════╬═════════╣
║ orange ║ 2 ║
╠═════════╬═════════╣
║ banana ║ 2 ║
╠═════════╬═════════╣
║ banana ║ 3 ║
╠═════════╬═════════╣
║ orange ║ 3 ║
╠═════════╬═════════╣
║ banana ║ 4 ║
╚═════════╩═════════╝
【问题讨论】:
-
一个连接可能还不够。
-
您不需要加入。请参阅我对此的回答。顺便说一下,这不是产品表。因为表中的记录不能唯一地代表一个产品。理想情况下,您应该有一个每个产品一行的产品表和一个链接产品和用户的 user_product 表。
-
您是否只需要
user_id或user表中的更多列?是否有FOREIGN KEY约束来强制引用完整性?一个UNIQUE约束禁止product(product, fk_user)上的欺骗?您的 Postgres 版本?
标签: sql postgresql relational-division