Sql server SQL Server:在表上联接,无需担心重复行
假设我有两张桌子: 主要目标是: 动物参考Sql server SQL Server:在表上联接,无需担心重复行,sql-server,join,left-join,Sql Server,Join,Left Join,假设我有两张桌子: 主要目标是: 动物参考 id name 1 dog 2 cat 3 honey badger 和查找: 动物性食物 id animal_id name 1 1 dog food 2 2 cat food 3 2 fish 4 2 mice 5
id name
1 dog
2 cat
3 honey badger
和查找:
动物性食物
id animal_id name
1 1 dog food
2 2 cat food
3 2 fish
4 2 mice
5 3 larva (ew, gross)
现在说我想加入并得到动物最喜欢的食物:
SELECT id,
name
FROM animal_ref ar
LEFT OUTER JOIN animal_food af on af.animal_id = ar.id
现在,上面的例子很糟糕,但是说每只动物都应该只喜欢一种食物,但是食物桌很邋遢,有时会有重复的机会(因为猫太挑剔了)
现在假设,如果动物表的结果是这个查询中的一个副本,那么世界就结束了——我们真的不在乎它们吃得太多,所以如果有副本,我们不介意选择顶部的一个
如何确保动物表始终只返回其自己的行?最好的方法是对动物id列设置唯一的约束。这样可以确保任何特定的动物在整个表中只能存在一次
我不建议随便挑选一张唱片。最好防止这种情况发生 防止这种情况发生的最好方法是对animal_id列设置唯一的约束。这样可以确保任何特定的动物在整个表中只能存在一次
我不建议随便挑选一张唱片。最好防止这种情况发生 如果你真的不在乎你得到了什么
SELECT id, name
FROM animal_ref ar
LEFT OUTER JOIN (
SELECT animal_id, MAX(name) AS Name
FROM animal_food
GROUP BY animal_id
) af
ON af.animal_id = ar.id
猫
会得到老鼠
顺便说一句如果你真的不在乎你得到了什么
SELECT id, name
FROM animal_ref ar
LEFT OUTER JOIN (
SELECT animal_id, MAX(name) AS Name
FROM animal_food
GROUP BY animal_id
) af
ON af.animal_id = ar.id
Cat
将获得鼠标
btw请试用,希望对您有用
WITH CTE AS
(
SELECT *,RN=ROW_NUMBER() OVER (
PARTITION BY animal_id
ORDER BY animal_id DESC)
FROM #animal_food
)
SELECT ar.id, ct.name
FROM CTE ct
RIGHT JOIN #animal_ref ar
ON ct.animal_id = ar.id
WHERE RN = 1 OR RN is null
请把动物食品换成动物食品,把动物食品换成动物食品。请试试,希望对你有用
WITH CTE AS
(
SELECT *,RN=ROW_NUMBER() OVER (
PARTITION BY animal_id
ORDER BY animal_id DESC)
FROM #animal_food
)
SELECT ar.id, ct.name
FROM CTE ct
RIGHT JOIN #animal_ref ar
ON ct.animal_id = ar.id
WHERE RN = 1 OR RN is null
请将#animal_food改为animal_food,并将#animal_ref改为animal_ref我不同意您标记为正确的查询 Arif查询是可以的 第二,必须有办法找到特定动物(另一张桌子)经常使用/订购的动物食品。这有意义吗 顺便说一句,你如何对动物id列设置唯一约束?
猫可能喜欢老鼠、鱼、牛奶等。我不同意你的说法 Arif查询是可以的 第二,必须有办法找到特定动物(另一张桌子)经常使用/订购的动物食品。这有意义吗 顺便说一句,你如何对动物id列设置唯一约束?
猫可能喜欢老鼠、鱼、牛奶等。好主意。除了主键之外,我从来没有在任何列上使用过唯一约束。我想在我修复查询之前,只需中指草率地更新/插入查询?好主意。除了主键之外,我从来没有在任何列上使用过唯一约束。我猜这只是中间手指的更新/插入查询,直到我修复它们。我认为每个动物都能得到他们的老式食物,这太好了!这对我来说是可行的,直到我可以打一些人,并使用TGH的良好实践建议。谢谢。我认为每个动物都能得到他们的传统食物,这太好了!这对我来说是可行的,直到我可以打一些人,并使用TGH的良好实践建议。谢谢。#动物食物和#动物参考号是如何加载的?亲爱的,这是临时表名,它是为短时间制作的,不使用首字母。#动物食物和#动物参考号是如何加载的?亲爱的,这是临时表名,它是为短时间制作的,不提前使用