标签: outer-join

从左外连接中选择顶部一个

大家好,我有一个查询,基本上选择我们用户使用的最新浏览器.

这是我们的(简化)表结构

HITS_TABLE
----------
USERID
BROWSER
HITSDATE

USER_TABLE
----------
USERID
USERNAME
Run Code Online (Sandbox Code Playgroud)

这是我如何查询用户使用的最新浏览器

SELECT U.*, H.BROWSER

FROM USER_TABLE U

CROSS APPLY 
  (SELECT TOP 1 BROWSER 
   FROM HITS_TABLE 
   WHERE HITS_TABLE.USERID = U.USERID
   ORDER BY HITS_TABLE.HITSDATE DESC
  )as H
Run Code Online (Sandbox Code Playgroud)

几天前刚刚添加了HITS_TABLE.

因此,该查询只是在我们添加HITS_TABLE后访问我们网站的结果,并消除了其他用户.

以下是示例案例

USER_TABLE
-------------------
USERID     USERNAME
-------------------
1          'Spolski'
2          'Atwoord
3          'Dixon'


HITS_TABLE
------------------------------
USERID     HITSDATE     BROWSER
------------------------------
2          15/8/2009    'Firefox 3.5'
1          16/8/2009    'IE 6'
2          16/8/2009    'Chrome'
Run Code Online (Sandbox Code Playgroud)

这是样本结果

------------------------------
USERID     USERNAME     BROWSER
------------------------------
1          'Spolsky'    'IE 6'
2          'Atwoord'    'Chrome' …
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 outer-join

6
推荐指数
1
解决办法
1万
查看次数

在LEFT OUTER JOIN中替换返回的空值

SELECT        WO_BreakerRail.ID, indRailType.RailType, indRailType.RailCode, WO_BreakerRail.CreatedPieces, WO_BreakerRail.OutsideSource, WO_BreakerRail.Charged, WO_BreakerRail.Rejected, WO_BreakerRail.RejectedToCrop, WO_BreakerRail.Date
FROM            indRailType LEFT OUTER JOIN
                         WO_BreakerRail ON indRailType.RailCode = WO_BreakerRail.RailCode AND WO_BreakerRail.Date = @date
Run Code Online (Sandbox Code Playgroud)

返回时,Date列中有NULL值,其中没有来自WO_BreakerRail的匹配行.有没有办法用@date替换那些NULL值?

sql null join outer-join

6
推荐指数
1
解决办法
6359
查看次数

在MySQL中模拟完全外连接的有效方法?

根据Google搜索:由于MySQL不支持完全外连接,因此可以通过union和/或union all进行模拟.但这两者要么删除真正的重复,要么显示虚假的重复.

什么是正确有效的方法?

这个问题似乎很有意义,但无法得到答案.

mysql outer-join

6
推荐指数
1
解决办法
4464
查看次数

连接表的SQL别名

我有这样的查询:

select a1.name, b1.info 
 from (select name, id, status 
         from table1 a) as a1
right outer join (select id, info 
                    from table2 b) as b1 on (a1.id = b1.id)
Run Code Online (Sandbox Code Playgroud)

我只想包含a1.status = 1的所有内容,因为我正在使用外连接,所以我不能只where为table1 添加一个约束,因为我想要排除的table2中的所有信息仍然存在,只是没有名字.我在想这样的事情:

 select z1.name, z1.info 
   from ((select name, id, status 
            from table1 a) as a1
right outer join (select id, info 
                    from table2 b) as b1 on (a1.id = b1.id)) as z1 
  where z1.status = 1
Run Code Online (Sandbox Code Playgroud)

但我不认为这是合法的.

编辑:如下所述,外连接实际上对我正在尝试做的事情没有意义.例如,如果我想要table2中的所有数据,其中table1中的status!= 1,包括table1中根本不存在相应ID的所有数据,该怎么办?因此,我需要来自table2的所有数据的外部联接,但仍希望排除status = 1的那些条目.

相当于:

 select z1.name, z1.info 
   from ((select …
Run Code Online (Sandbox Code Playgroud)

sql sql-server alias join outer-join

6
推荐指数
2
解决办法
8万
查看次数

(+)mysql中外连接的语法

可能重复:
Oracle"(+)"运算符
Oracle(旧?)联接 - 用于转换的工具/脚本?

多年来我一直在使用Oracle.现在我使用mysql并且在MySQL中找不到外连接的非ansi版本/速记版本.

在oracle我能做到这一点

select a.country acountry,
        a.stateProvince aStateProvince,
        b.countryName bcountry,
        b.name bstateProvince
  from User a,
          stateprovince b
  where a.country*=b.countryName **(+)**
          and a.stateProvince*=b.name **(+)**
Run Code Online (Sandbox Code Playgroud)

获得外部联接.mysql可以做类似的事吗?

mysql sql oracle outer-join

6
推荐指数
1
解决办法
1万
查看次数

Oracle的字符串OUTER JOIN(+) - Migration PostgreSQL

我正在将客户端的软件数据库从Oracle迁移到PostgreSQL,我在理解查询,它做了什么以及如何迁移它时遇到了一些麻烦.

查询是:

SELECT * 
FROM TBL1, TBL2, TBL3, TBL4 
WHERE TBL3.Project_ID = TBL1.Project_ID 
 AND TBL2.Type_ID = TBL1.Type_ID 
 AND TBL4.PROPERTY_NAME(+)='Id' 
 AND TBL4.Entity_ID(+)=TBL1.Entity_ID
Run Code Online (Sandbox Code Playgroud)

而我得不到的部分是'Id'上的外连接(+).表上的连接,OK,但是在字符串上?我不知道它做了什么.

有人有想法吗?谢谢.

oracle postgresql join database-migration outer-join

6
推荐指数
1
解决办法
4172
查看次数

SQL select将两列合并为一列

我有四张桌子:

表A:

ID | B_ID
----------
 1 |  5
 2 |  6
 3 |  7
 4 |  8
Run Code Online (Sandbox Code Playgroud)

表B:

B_ID
-----
 5
 6
 7
 8
Run Code Online (Sandbox Code Playgroud)

表C:

C_ID | C_Name
--------------
 5   | Alpha
 6   | Beta
Run Code Online (Sandbox Code Playgroud)

表D:

D_ID | D_Name
--------------
 7   | Delta
 8   | Gamma
Run Code Online (Sandbox Code Playgroud)

注意,表B中的值可以来自表C或表D.

我现在需要一个ID从表A 中显示的查询和一个名为第二列的查询,该列Name由基于B_ID表B列的相应名称组成.

预期结果应如下所示:

ID | Name
----------
 1 |  Alpha
 2 |  Beta
 3 |  Delta
 4 |  Gamma
Run Code Online (Sandbox Code Playgroud)

我试过的是这个查询:

SELECT *
FROM B
LEFT OUTER …
Run Code Online (Sandbox Code Playgroud)

mysql sql select join outer-join

6
推荐指数
1
解决办法
853
查看次数

C#Linq对重复值的完全外连接

我有两个具有这种类型的IQueryable集合

public class Property  
{  
   public string Name {get; set;}  
}
Run Code Online (Sandbox Code Playgroud)

集合1,具有以下名称值:

A  
A  
A  
B  
Run Code Online (Sandbox Code Playgroud)

集合2,具有以下名称值:

A  
B  
B
Run Code Online (Sandbox Code Playgroud)

我想得到的是第三个集合,其中集合1和2的名称值匹配,如果没有匹配,则null (empty)如下:

Result Collection:  

A     A
A     null  
A     null  
B     B  
null  B
Run Code Online (Sandbox Code Playgroud)

如何用C#,LINQ实现这一目标?

c# linq outer-join

6
推荐指数
1
解决办法
226
查看次数

SQL:空列上的FULL OUTER JOIN

我想FULL OUTER JOIN在几个列上使用两个表之间,但是当两个列都为null时,它们在连接期间不被视为相等,因此我获得两个不同的行.如何编写连接,所以null列被认为是相等的?

我已经设置了一个简化的例子:

create table t1 (
 id number(10) NOT NULL,
 field1 varchar2(50),
 field2 varchar2(50),
 CONSTRAINT t1_pk PRIMARY KEY (id)
);

create table t2 (
  id number(10) NOT NULL,
  field1 varchar2(50),
  field2 varchar2(50),
  extra_field number(1),
  CONSTRAINT t2_pk PRIMARY KEY (id)
);

insert into t1 values(1, 'test', 'test2');
insert into t2 values(1, 'test', 'test2', null);

insert into t1 values(2, 'test1', 'test1');
insert into t2 values(2, 'test1', 'test1', null);

insert into t1 values(3, 'test0', null);
insert into t2 values(3, …
Run Code Online (Sandbox Code Playgroud)

sql oracle join outer-join

5
推荐指数
1
解决办法
8209
查看次数

LEFT OUTER JOIN 且仅返回第一个匹配项

想象一下以下两个表,分别命名为“Users”和“Orders”:

ID  NAME
1   Foo
2   Bar
3   Qux


ID  USER  ITEM  SPEC  TIMESTAMP
1   1     12    4     20150204102314
2   1     13    6     20151102160455
3   3     25    9     20160204213702
Run Code Online (Sandbox Code Playgroud)

我想要得到的输出是:

USER   ITEM  SPEC  TIMESTAMP
1      12    4     20150204102314
2      NULL  NULL  NULL
3      25    9     20160204213702
Run Code Online (Sandbox Code Playgroud)

换句话说:在用户和订单之间执行 LEFT OUTER JOIN,如果您没有找到该用户的任何订单,则返回 null,但如果找到一些,则仅返回第一个订单(基于时间戳的最早订单) 。

如果我只使用 LEFT OUTER JOIN,它将为用户 1 返回两行,我不希望这样。我想过将 LEFT OUTER JOIN 嵌套在另一个选择中,该选择将按其他字段进行分组并获取 MIN(TIMESTAMP) 但这也不起作用,因为我需要在我的分组依据中包含“SPEC”,并且因为这两个订单有不同的规格,它们仍然都出现。

任何有关如何实现预期结果的想法都将受到赞赏。

sql sql-server left-join outer-join

5
推荐指数
1
解决办法
1万
查看次数