表连接在哪里
Posted
技术标签:
【中文标题】表连接在哪里【英文标题】:table join where 【发布时间】:2009-11-26 08:04:50 【问题描述】:Table1 t10 (id)
id
---
1
2
表 t11(a1,a2,a3)
a1 a2 a3
----------
1 10 a
1 10 b
1 11 b
1 12 c
2 20 d
2 21 e
select * from t10 a,t11 b where a.id = b.a1 如何显示
id a1 a2 a3
--------------
1 1 10 a
1 1 10 b //(not display this row)
1 1 11 b //(not display this row)
1 1 12 c //(not display this row)
2 2 20 d
2 2 21 e //(not display this row)
只需获取 t11 的随机行
maybe display this
id a1 a2
----------
1 1 11 b
1 1 10 a //(not display this row)
1 1 10 b //(not display this row)
1 1 12 c //(not display this row)
2 2 20
2 2 21 //(not display this row)
【问题讨论】:
那些是一些糟糕的表和列名...... 是的,很抱歉,它是甲骨文 【参考方案1】:select a1 as id, a1, min(a2) as a2
from t11
group by a1
会给你:
id a1 a2
----------
1 1 10
2 2 20
【讨论】:
是的,但他说,虽然很难弄清,但我们希望将第一行插入表中(例如,a2=11 表示 id=1),但显然他确实需要一些其他因素在确定他特别想要哪一行而不是它们插入表中的方式。【参考方案2】:这看起来就像他想要从 ms 访问中获得 FIRST/LAST 之类的东西。
这可以(非常接近地)在 Sql Server 中使用
DECLARE @Table TABLE(
id INT,
a1 INT,
a2 INT
)
INSERT INTO @Table (id,a1,a2) SELECT 1, 1, 11
INSERT INTO @Table (id,a1,a2) SELECT 1, 1, 10
INSERT INTO @Table (id,a1,a2) SELECT 1, 1, 12
INSERT INTO @Table (id,a1,a2) SELECT 2, 2, 20
INSERT INTO @Table (id,a1,a2) SELECT 2, 2, 21
SELECT *
FROM @Table t
WHERE a2 = (SELECT TOP 1 a2 FROM @Table WHERE id = t.id AND a1 = t.a1)
【讨论】:
【参考方案3】:这就是答案:
SELECT *
FROM t10 a, (
SELECT * FROM (
SELECT b.*, ROW_NUMBER() OVER(PARTITION BY a10 ORDER BY a10) as rn
FROM t11 b
) WHERE rn =1) b
WHERE a.id = b.a10(+)
【讨论】:
当您想添加信息时,请不要发布答案。您可以编辑您的问题(请这样做,它缺少一些信息),或将 cmets 添加到您收到的答案中(像这样,在这里)。欢迎。 除非是答案,否则不要写答案。评论其他答案或更新您的问题。此外,您不断反转 t11 中 b 列的 10 和 11。 是的,对不起,第一次在这里问问题以上是关于表连接在哪里的主要内容,如果未能解决你的问题,请参考以下文章