标签: outer-join

通过实体框架和Where子句通过Linq To实体进行左外连接

在使用实体框架时,我已阅读了与在Linq to Entities(.NET 3.5)中实现等效的LEFT OUTER JOIN相关的所有帖子,但尚未找到解决以下问题的方法.

给出两个表,由下面的对象表示:

    public class Foo
    {
        public int FooId;  // primary key
        public string Name;
    }

    public class Bar
    {
        public int BarId;  // primary key
        public int FooId;  // foreign key
        public string Desc;
    }
Run Code Online (Sandbox Code Playgroud)

我需要创建一个Linq to Entities语句,它是以下SQL语句的EQUIVALENT.请注意,WHERE语句包含两个OR'd条件,这两个条件跨越两个表,并使用DISTINCT限定符.

SELECT DISTINCT
    Foo.*
FROM
    Foo
    LEFT OUTER JOIN Bar ON Foo.FooId = Bar.FooId
WHERE
    (Foo.Name = 'fooname' OR Bar.Desc = 'bardesc')
Run Code Online (Sandbox Code Playgroud)

我生成的Linq查询是通过实体框架实现的Linq到实体,并且(希望)生成一个要在服务器上执行的SQL语句.Linq to Entities不支持FirstOrDefault()扩展子句,因此LEFT OUTER JOIN的标准Linq语法将不起作用.

这是我的解决方案,但我无法做到以下任何一种情况:

1)生成一个结果集,其中包含由LEFT OUTER JOIN操作返回的一组Foo/Bar组合.

2)实现WHERE子句的等价物: WHERE (Foo.Name = 'fooname' OR …

linq-to-entities entity-framework left-join outer-join

4
推荐指数
1
解决办法
8681
查看次数

在SQL Server 2008中跨多个表使用SQL进行OUTER JOIN

我有一个SQL Server 2008数据库.该数据库有三个表:

  - Id
  - FullName
  - MembershipStatusId (nullable)
  - HairStyleId (nullable)
Run Code Online (Sandbox Code Playgroud)

MembershipStatus

  - Id
  - Name
Run Code Online (Sandbox Code Playgroud)

发型

  - Id
  - ColorName
  - Description
Run Code Online (Sandbox Code Playgroud)

我需要创建一个列出数据库中所有人的查询.因为MembershipStatusId并且HairStyleId都可以为空,我知道我需要做一个左外连接.但是,因为有多个表,我不知道该怎么做.只有一个左外连接,我知道我可以这样做:

SELECT
  p.*,
  m.Name as 'MembershipStatus',
  -- how do i include the person's hair color as part of my result set?
FROM
  Person p LEFT OUTER JOIN
    MembershipStatus m ON p.[MembershipStatusId]
Run Code Online (Sandbox Code Playgroud)

但是,我不确定如何为发型名称添加左外连接.有人可以告诉我如何包含人的头发颜色?

谢谢!

outer-join sql-server-2008

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

Oracle中使用IN运算符进行外连接的解决方法

我正在使用Oracle SQL,因此外连接具有良好的(+)语法.我应该警告你,我不能重新设计数据库; 我在一个大型组织工作.

以下是一些示例表:

People
PersonID   Name
1          Elmo
2          Oscar
3          Chris

Attribute
PersonID   Attribute
1          Happy
1          Muppet
1          Popular
2          Grouchy
2          Muppet
2          Popular
3          Programmer
Run Code Online (Sandbox Code Playgroud)

我想要一份人员名单,我想知道我们是否知道他们是幸福或不高兴.以下是我想要的输出:

Name       Mood
Elmo       Happy
Oscar      Grouchy
Chris
Run Code Online (Sandbox Code Playgroud)

所以这是我认为我会使用的查询:

SELECT p.Name, a.Attribute
FROM People p, Attributes a
WHERE p.PersonID = a.PersonID (+)
AND ( a.Attribute (+) = 'Happy'
   OR a.Attribute (+) = 'Grouchy' )
Run Code Online (Sandbox Code Playgroud)

(也许我必须把"OR a.Attribute IS NULL"或其他东西.)

但实际上我根本不允许在外连接中使用OR!我该怎么办呢?

sql oracle outer-join

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

MS Excel中的外连接

你知道如何用外连接连接两个表吗?知道在SQL中这样做,但我现在需要Excel.

我有一个列中的所有员工列表,我有一个每个员工的任务表.我想创建一个函数,它将填充缺少员工的表.

表1 - 所有员工的列表

Fernando
Hector
Vivian
Ivan

表2 - 实际任务列表

Fernando, task A, 5 hours
Vivian, task B, 8 hours

结果我想实现

Fernando, task A, 5 hours
Vivian, task B, 8 hours
Hector, , 0 hours
Ivan, , 0 hours

非常感谢任何想法.

excel outer-join

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

防止LINQ到实体联接中的NULL检查

我们有一张叫做的桌子Student.该表有一个名为的字段Homeroom,其中值是学生教室的房间号.该值可以为null.

我们有一个名为的第二个表Staff.该表还有一个字段,Homeroom用于指示教师分配到哪个教室.该值可以为null.

但是当学生Homeroom为空时,Staff不应返回记录.

我们曾经利用这样的事实:检查两个空字段的相等性总是在SQL中返回false.通过SQL,这就是我们获取所需数据的方式:

SELECT STUDENT.ID, STAFF.NAME as [Homeroom Teacher]
FROM STUDENT
LEFT OUTER JOIN STAFF ON
    STAFF.BUILDING = STUDENT.BUILDING AND
    STAFF.HOMEROOM = STUDENT.HOMEROOM
Run Code Online (Sandbox Code Playgroud)

学生将被退回,但没有老师.

我们正在使用Entity Framework和Code First POCO对象.所以,我们有一个Student对象和一个Staff对象.当我们在LINQ中重新创建此SQL时:

from student in repo.GetStudents()
join homeroomTeacher in repo.GetStaff()
    new { student.Building, Room = student.Homeroom }
     equals new { homeroomTeacher.Building, Room = homeroomTeacher.Homeroom }
into roj2
from homeroomTeacherRoj in roj2.DefaultIfEmpty()
select student.Id, homeroomTeacherRoj.Name;
Run Code Online (Sandbox Code Playgroud)

生成的SQL包含两个Homeroom字段的NULL检查:

SELECT STUDENT.ID, STAFF.NAME
FROM STUDENT AS …
Run Code Online (Sandbox Code Playgroud)

sql linq-to-entities entity-framework outer-join ef-code-first

4
推荐指数
1
解决办法
2570
查看次数

SqlAlchemy - 多对多外连接,连接条件

这是我的代码:

Table('contacts', self.metadata,
    Column('id', PGUuid, primary_key=True),
    Column('first_name', String(150), nullable=False),
    Column('middle_name', String(150), nullable=True),
    Column('last_name', String(150), nullable=False, index=True),
    Column('friendly_name', String(150), nullable=True),
    Column('alias', String(450), nullable=False, index=True),
    Column('prefix', String(5), nullable=True),
    Column('suffix', String(5), nullable=True),
    Column('ssn', String(12), nullable=True),
    Column('email', String(150), nullable=True),
    Column('date_of_birth', Date, nullable=True),
    Column('contact_type', String(16), nullable=False))
    self._contacts_addresses_table = Table('contacts_addresses', self.metadata,
            Column('contact_id', PGUuid, ForeignKey('contacts.id'),
            primary_key=True, index=True),
            Column('address_id', PGUuid, ForeignKey('addresses.id'),
            primary_key=True, index=True))
    self._contacts_phones_table = Table('contacts_phones', self.metadata,
            Column('contact_id', PGUuid, ForeignKey('contacts.id'),
            primary_key=True, index=True),
            Column('phone_id', PGUuid, ForeignKey('phones.id'),
            primary_key=True, index=True))
    self._contacts_notes_table = Table('contacts_notes', self.metadata,
            Column('contact_id', PGUuid, ForeignKey('contacts.id'),
            primary_key=True, index=True),
            Column('note_id', PGUuid, …
Run Code Online (Sandbox Code Playgroud)

many-to-many sqlalchemy outer-join python-3.x

4
推荐指数
1
解决办法
2659
查看次数

在两个列表上应用 outer()

我有一个清单,比如说exm = list( elm1=c('a', 'b'), elm2=c('b', 'c', 'd'), elm3=c('b', 'c', 'd', 'e'))。我想对来自 的两个元素的每个组合应用一个函数exm,例如,length( intersect( exm$elm1, exm$elm2 ) )。结果应该是一个对称矩阵。该函数outer似乎可以完成这项工作,但它仅适用于向量,而不适用于列表。有什么想法可以这样做吗?

r outer-join

4
推荐指数
1
解决办法
748
查看次数

在 SQL Server 中水平连接两个以上的表

以下是架构

+---------+---------+
| Employee Table    |
+---------+---------+
| EmpId   | Name    | 
+---------+---------+
| 1       | John    |
| 2       | Lisa    |
| 3       | Mike    |
|         |         |
+---------+---------+

+---------+-----------------+
| Family   Table            |
+---------+-----------------+
| EmpId   | Relationship    | 
+---------+-----------------+
| 1       | Father          |
| 1       | Mother          |
| 1       | Wife            |
| 2       | Husband         |
| 2       | Child           |
+---------+-----------------+

+---------+---------+
| Loan  Table       |
+---------+--------+
| LoanId  | EmpId …
Run Code Online (Sandbox Code Playgroud)

sql t-sql outer-join sql-server-2008

4
推荐指数
1
解决办法
7428
查看次数

Flask-SQLAlchemy左外部联接筛选查询

最初,我尝试进行“右外部联接”,但是一旦发现不被支持,我便开始着手从左侧来。但是,我在弄清楚如何编写所需的内容时遇到了麻烦。本质上,我有两个表,Table_1并且Table_2需要Table_1where column_c等于的所有行1。此外,我需要所有的行Table_2,其中column_b是不是已经在Table 1。看起来像这样:

**Table_1**
column_a ( a and b are the
column_b ( primary key.
column_c

**Table_2**
column_b
Run Code Online (Sandbox Code Playgroud)

这就是我用SQL编写的方式:

SELECT *
FROM (SELECT * FROM Table_1 WHERE column_a = 123) t1
RIGHT OUTER JOIN Table_2 t2 ON t1.column_b = t2.column_b
WHERE t1.column_c = 1 or t1.column_c is NULL;

SELECT *
FROM Table_2 t2
LEFT OUTER JOIN (SELECT * FROM Table_1 WHERE column_a = 123) t1 …
Run Code Online (Sandbox Code Playgroud)

python mysql outer-join flask flask-sqlalchemy

4
推荐指数
1
解决办法
1342
查看次数

SQL在JOIN条件中使用过滤器与WHERE子句中的过滤器保持连接

我在工作中重构一些sql,偶然发现了一些我不确定如何解释的东西.我认为有两个查询会产生相同的结果,但不会,我不知道为什么.

查询如下:

select *
from TableA as a
left join TableB b on a.id = b.id and b.status in (10, 100)

select *
from TableA as a
left join TableB b on a.id = b.id
where b.status is null or b.status in (10, 100)
Run Code Online (Sandbox Code Playgroud)

什么时候这些不会返回相同的结果?

sql t-sql sql-server join outer-join

4
推荐指数
2
解决办法
1261
查看次数