【问题标题】: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) 

【问题讨论】:

  • 那些是一些糟糕的表和列名......
  • 是的,很抱歉,它是甲骨文

标签: sql oracle join


【解决方案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。
    • 是的,对不起,第一次在这里问问题
    猜你喜欢
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    相关资源
    最近更新 更多