标签: self-join

自我加入问题

我有一个名为tblAccInfo的表,下面是表数据.我需要如下输出.

Input
PolicyNumber    BankAc   StorageDate    VerNum
6003210400      123      2012-01-01     1
6003210400      164      2012-01-03     2
6003210400      860      2012-01-05     3
6004317654      301      2012-02-05     1
6004317654      615      2012-03-01     2
6004317654      253      2012-03-12     3
6004317654      887      2012-04-03     4
Run Code Online (Sandbox Code Playgroud)

OUTPUT

PolicyNumber  IntialBankAc IntialSDate VerNum  LatestBankAc LatestSDate VerNum
6003210400    123          2012-01-01  1       860          2012-01-05  3
6004317654    301          2012-02-05  1       887          2012-04-03  4
Run Code Online (Sandbox Code Playgroud)

我试过下面的自我加入,但没有成功.请帮我解决这个问题.

Select DISTINCT
    P.PolicyNumber,
    P.BankAc [IntialBankAc],
    P.StorageDate IntialSDate],
    P.VerNum,
    P1.BankAc [LatestBankAc],
    P1.StorageDate [LatestSDate],
    P1.VerNum
FROM tblAccInfo P
INNER JOIN tblAccInfo P1
ON P1.PolicyNumber=P.PolicyNumber
AND …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server self-join sql-server-2008

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

SQLAlchemy别名混淆

我有SQLAlchemy和别名的问题.我正在尝试在名为Task的表上进行自联接,但SQLAlchemy将我的别名表与非别名混淆.

我的查询要复杂得多,但这是一个简化版本:

baseTask = aliased(model.Task)

query = model.session.query(model.Task.name)\
       .select_from(baseTask)\
       .join((model.Task, model.Task.taskid==baseTask.taskid))

The resulting query looks like this:    
SELECT task_1.name 
FROM task AS task_1 INNER JOIN task ON task_1.taskid = task_1.taskid
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它在select和join条件下混淆了无别名表和别名task_1.

通过在两个表上使用别名,它可以工作:

baseTask = aliased(model.Task)
task = aliased(model.Task)

query = model.session.query(task.name)\
        .select_from(baseTask)\
        .join((task, task.taskid==baseTask.taskid))

This gives the desired result:
SELECT task_1.name 
FROM task AS task_2 INNER JOIN task AS task_1 ON task_1.taskid = task_2.taskid
Run Code Online (Sandbox Code Playgroud)

当我在两个表上使用别名时,它不会混淆它们,结果查询正是我想要的.问题是由于各种原因我不能在我加入的表上使用别名,这是由于应用程序设计中动态生成查询.

我正在使用SQLAlchemy 0.6.8,我试图升级到0.7.9,但我仍然遇到了这个问题.关于如何解决这个问题的任何想法?

sql alias sqlalchemy self-join

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

自联接查询

请考虑下表:

mysql> select * from phone_numbers;
+-------------+------+-----------+
| number      | type | person_id |
+-------------+------+-----------+
| 17182225465 | home |         1 |
| 19172225465 | cell |         1 |
| 12129876543 | home |         2 |
| 13049876543 | cell |         2 |
| 15064223454 | home |         3 |
| 15064223454 | cell |         3 |
| 18724356798 | home |         4 |
| 19174335465 | cell |         5 |
+-------------+------+-----------+
Run Code Online (Sandbox Code Playgroud)

我试图找到那些有家用电话而不是电池的人.

此查询有效:

mysql> select h.*
    -> from phone_numbers …
Run Code Online (Sandbox Code Playgroud)

mysql sql join self-join

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

如何在ActiveRecord中进行自反的自我加入关系?

我正在尝试实现一个社交网络风格的友谊模型,我没有太多的运气试图找出那里可用的插件.如果我自己做的话,我想我会更好地学习Rails.所以这就是我所拥有的:

class User < ActiveRecord::Base
  has_many :invitee_friendships ,
           :foreign_key => :friend_id,
           :class_name => 'Friendship'

  has_many :inviter_friends,
            :through => :invitee_friendships

  has_many :inviter_friendships ,
           :foreign_key => :user_id,
           :class_name => 'Friendship'

  has_many :invited_friends,
            :through => :inviter_friendships

end

class Friendship < ActiveRecord::Base
  belongs_to :user
  //I think something needs to come here, i dont know what
end
Run Code Online (Sandbox Code Playgroud)

irb当我尝试这样的:

friend1  = Friend.create(:name => 'Jack')
friend2  = Friend.create(:name => 'John')
bff = Friendship.create(:user_id =>1, :friend_id => 2)
f1.invited_friends
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

ActiveRecord::HasManyThroughSourceAssociationNotFoundError:
Could not find the source …
Run Code Online (Sandbox Code Playgroud)

activerecord ruby-on-rails self-join social-networking

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

如何使用hadoop实现自联接/跨产品?

对项目对进行一些评估是一项常见任务:示例:重复数据删除,协同过滤,类似项目等.这基本上是具有相同数据源的自连接或跨产品.

hadoop mapreduce self-join

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

C#LINQ选择项目棘手的过滤

我正在使用C#3.5我有一个IList<MyItemLinkProperty>,MyItemLinkProperty表示项目与其属性(一个或多个)之间的链接.它有ItemId,PropertyId,PropertyValue.在此列表中ItemId可以多次出现,因为项目可以具有许多属性,颜色,大小等(这是一个与性能相关的问题,我有这种列表并且没有映射到项目实体).

                  ItemID  PropId  PropValue
itemProperty1 = { 1001,   1,      'Red' }
itemProperty2 = { 1001,   2,      'Small' }
itemProperty3 = { 1002,   1,      'Red' }
itemProperty4 = { 1002,   3,      'Medium' }
itemProperty5 = { 1003,   4,      'Green' }
itemProperty6 = { 1003,   2,      'Small' }
Run Code Online (Sandbox Code Playgroud)

现在我需要找到所有具有属性A和属性B的项目.例如'red'和'small'.这应该给我ItemID1001具有这两个属性.

在伪代码中我想我是在"给我属性id为1或2且项目ID相同的项目".然后我知道有两个具有这些属性的项目.

我在想一个linq查询会这样做.但是没有得到这个工作并陷入困境.也许我在这里阻止了我的思绪,过度思考它并使其过于复杂......

为此提供最佳解决方案的任何提示?

c# linq self-join

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

Doctrine2自我加入,如何加入自我无关系列?

示例mysql查询:

SELECT
a1.*
FROM
agreement a1
LEFT JOIN agreement a2 on a1.agreementType = a2.agreementType and a2.id > a1.id
WHERE
a2.id is null
Run Code Online (Sandbox Code Playgroud)

查询的目的是获取返回类型的最后一个协议.有很多类型,我只想要列出每种类型的最新协议.我上面的示例查询按预期工作,但没有进入DQL.

如果我没有引用自身的列,我将如何在DQL中执行此操作?请注意,"agreementType"也是不同表的外键.

doctrine self-join dql

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

ActiveRecord:在自联接中删除子项后取消外键

我在ActiveRecord中为我的模型进行了自我连接,如下所示:

class Employee < ActiveRecord::Base
  has_many :subordinates, class_name: "Employee",
                          foreign_key: "manager_id"

  belongs_to :manager, class_name: "Employee"
end 
Run Code Online (Sandbox Code Playgroud)

如果我删除了Manager行,我希望将该Manager下的所有员工的'manager_id'外键值设置为NULL.这是ActiveRecord隐式处理的东西,还是需要在某处定义的东西.

ruby activerecord ruby-on-rails self-join

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

SQL Server - 复杂的分组 - Gaps和Islands

我有一个包含这样数据的表

+-------------+--------------+------------+----------------+
| CustomerSID | StartDateSID | EndDateSID | MarketingOptIn |
+-------------+--------------+------------+----------------+
|       12345 |     20101019 |   20131016 | Y              |
|       12345 |     20131017 |   20140413 | Y              |
|       12345 |     20140414 |   20140817 | N              |
|       12345 |     20140818 |   20141228 | N              |
|       12345 |     20141229 |   20150125 | Y              |
|       12345 |     20150126 |          0 | Y              |
+-------------+--------------+------------+----------------+
Run Code Online (Sandbox Code Playgroud)

我需要在这个表的顶部创建一个视图,使数据格式化为Flag的以下格式,基本上是Flag为Y或N的持续时间.(EndDateSID - 0当前是活动的,所以今天的日期)

+-------------+--------------+------------+----------------+
| CustomerSID | StartDateSID | EndDateSID | MarketingOptIn | …
Run Code Online (Sandbox Code Playgroud)

sql sql-server group-by self-join

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

SQL 查询 group by 和 have all

我有一张桌子:

Parent Child Educated
'P1', 'C1', 'YES'
'P1', 'C2', 'YES'
'P1', 'C3', 'NO'
'P2', 'C11', 'YES'
'P2', 'C12', 'NO'
'P3', 'C21', 'YES'
'P3', 'C22', 'YES'
'P4', 'C31', 'NO'
'P4', 'C32', 'NO'
Run Code Online (Sandbox Code Playgroud)

现在,我需要找到所有孩子都接受过教育的父母,即 Educated='YES'。

就像在上面的情况下父'P3'

任何人都可以提出一个查询来获取这个

mysql sql database group-by self-join

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