我有以下情况:
table User (id, name)
table Belonging (id, name, color)
table UserBelonging (id, user_id, belonging_id)
现在,UserBelonging
是连接User
和他的Belonging
的联接表。
当我想要提取某些User
的所有物品时会出现问题,这些物品是红色的。
我认为有两种方法可以做到:
UserBelonging
,然后循环浏览它们并检查哪些是红色的UserBelonging (id, user_id, belonging_id, color)
,然后在同一个表中查询。 这两种方法对我来说都很难看。是否有任何有数据库表经验的人可以告诉我哪种方式更好,为什么或可能给我一个更好的解决方案?
感谢
答案 0 :(得分:1)
联接表应仅包含user_id
和belonging_id
,其复合ID为(user_id, belonging_id)
或自动递增id
列。< / p>
排除了#2。
现在,您可以使用策略#1,或者您可以在select
语句中过滤掉非红色物品。
SELECT b.id, b.name, b.color
FROM UserBelonging ub
LEFT JOIN Belonging b
ON ub.belonging_id = b.id
WHERE ub.user_id = 123456789
AND b.color = 'red'
答案 1 :(得分:1)
SELECT B.* FROM User U
INNER JOIN UserBelonging UB on UB.UserId=U.Id
INNER JOIN Belonging B on B.Id = UB.BelongingId
Where B.Color = 'red' AND U.Name='Sam'
我认为像这样的联盟会做你想做的事。
答案 2 :(得分:0)
您可以轻松地将1 JOIN和A WHERE语句与您的颜色条件和user_id一起使用。在讨论关系数据库时,联接是最常见的操作之一。 查看W3schools以获取一些基本示例。
答案 3 :(得分:0)
通常最好不要在数据库中使用循环。在SQL Server中,我会这样做(但我不知道它是否适用于您的数据库)
Select User.Name, Belonging.name, Belonging.color from User inner join UserBelonging
on User.id = UserBelonging.user_id inner join Belonging
on UserBelonging.belonging_id = Belonging.id
where Belonging.color = 'red' and User.name = 'put the name here'
问候
添