我有下表:
myTable:
+----+----------+
| id | parentID |
+----+----------+
| 1 | null |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 4 |
-----------------
Run Code Online (Sandbox Code Playgroud)
我想让所有行都追溯到没有parentID了.所以".... WHERE id = 5"会给我:
5, 4, 2, 1
Run Code Online (Sandbox Code Playgroud) 可能重复:
来自sql中的交叉连接的组合(不是排列)
我目前有一张包含以下记录的表格:
A1
A2
A3
B1
B2
C1
C2
Run Code Online (Sandbox Code Playgroud)
同一个字母表示一些共同的标准(例如,"字母"栏的共同值).我按照以下标准自行加入:
SELECT mytable.*, self.* FROM mytable INNER JOIN mytable AS self
ON (mytable.letter = self.letter and mytable.number != self.number);
Run Code Online (Sandbox Code Playgroud)
此连接提供如下内容:
A1 A2
A2 A1
A1 A3
A3 A1
A2 A3
A3 A2
B1 B2
B2 B1
C1 C2
C2 C1
Run Code Online (Sandbox Code Playgroud)
但是,我只想包括每一对(组合而不是排列).我如何得到以下内容:
A1 A2
A1 A3
A2 A3
B1 B2
C1 C2
Run Code Online (Sandbox Code Playgroud) 我需要在这张桌子上使用Self Join.
+------------+------+--------+
| Country | Rank | Year |
+------------+------+--------+
|France | 55 | 2000 |
+------------+------+--------+
|Canada | 30 | 2000 |
+------------+------+--------+
|Liberia | 59 | 2001 |
+------------+------+--------+
|Turkey | 78 | 2000 |
+------------+------+--------+
|Japan | 65 | 2003 |
+------------+------+--------+
|Romania | 107 | 2001 |
+------------+------+--------+
Run Code Online (Sandbox Code Playgroud)
我需要使用自我加入来获得与土耳其同年的国家.仅显示国家/地区和年份.
这就是我想要做的.
SELECT DISTINCT a.Country, a.Year
FROM table1 AS a, table1 AS b
WHERE a.Year=b.Year and a.Country='Turkey';
Run Code Online (Sandbox Code Playgroud)
^ googled自我加入,并成功.
我只得到土耳其.我究竟做错了什么?
我正在尝试根据混合列找到重复的行.这是我的一个例子:
CREATE TABLE Test
(
id INT PRIMARY KEY,
test1 varchar(124),
test2 varchar(124)
)
INSERT INTO TEST ( id, test1, test2 ) VALUES ( 1, 'A', 'B' )
INSERT INTO TEST ( id, test1, test2 ) VALUES ( 2, 'B', 'C' )
Run Code Online (Sandbox Code Playgroud)
现在,如果我运行此查询:
SELECT [LEFT].[ID]
FROM [TEST] AS [LEFT]
INNER JOIN [TEST] AS [RIGHT]
ON [LEFT].[ID] != [RIGHT].[ID]
WHERE [LEFT].[TEST1] = [RIGHT].[TEST2]
Run Code Online (Sandbox Code Playgroud)
我希望能找回两个id.(1和2),但我只回到了一排.
我的想法是它应该比较每一行,但我想这不正确?为了解决这个问题,我将查询更改为:
SELECT [LEFT].[ID]
FROM [TEST] AS [LEFT]
INNER JOIN [TEST] AS [RIGHT]
ON [LEFT].[ID] != [RIGHT].[ID]
WHERE …Run Code Online (Sandbox Code Playgroud) 我试图通过自连接实现同一模型的记录之间的多个关系(基于@Shtééf的答案).我有以下型号
create_table :relations, force: true do |t|
t.references :employee_a
t.string :rel_type
t.references :employee_b
end
class Relation < ActiveRecord::Base
belongs_to :employee_a, :class_name => 'Employee'
belongs_to :employee_b, :class_name => 'Employee'
end
class Employee < ActiveRecord::Base
has_many :relations, foreign_key: 'employee_a_id'
has_many :reverse_relations, class_name: 'Relation', foreign_key: 'employee_b_id'
has_many :subordinates, through: :relations, source: 'employee_b', conditions: {'relations.rel_type' => 'manager of'}
has_many :managers, through: :reverse_relations, source: 'employee_a', conditions: {'relations.rel_type' => 'manager of'}
end
Run Code Online (Sandbox Code Playgroud)
通过此设置,我可以成功访问每个记录的下属和管理员列表.但是,我很难以下列方式建立关系
e = Employee.create
e.subordinates.create
e.subordinates #=> []
e.managers.create
e.managers #=> [] …Run Code Online (Sandbox Code Playgroud) activerecord many-to-many ruby-on-rails associations self-join
假设我有一个由像这样的条目组成的表
ID Arrival Date Arrival City Departure Date Departure City
1 Jun 27 2015 Berlin Jun 20 2015 Paris
1 Jul 1 2015 Rome Jun 29 2015 Berlin
1 Jul 30 2015 Vienna Jul 15 2015 Rome
2 Jun 28 2015 Prague Jun 23 2015 Vienna
2 Jul 1 2015 Rome Jun 29 2015 Prague
2 Jul 30 2015 Vienna Jul 15 2015 Moscow
...
Run Code Online (Sandbox Code Playgroud)
并且对于每个ID,我想将这些数据连接到自身,以便随后的观察Departure Date和Arrival Date成对分组 - 即离开与每个ID的先前到达配对.
在上面的例子中(为了方便起见,观察结果被排序),第2行将被附加到第1行,第3行到第2行,第5行到第4行以及第6行到第5行(因此产生4行字段ID Arrival Date Arrival City …
我有一个现有的InnoDB表,它已经有指向不同表的外键.
但是当我尝试创建指向主索引的外键时,我收到错误(检查数据类型).
该表是User with User_Id作为Primary.
我想要一个外键Manager_ID,这是一个FK到User_Id.
两个INT都长度10无符号...
但我仍然得到数据检查错误......?
我在oracle数据库中有一个表.架构是
create table PERIODS
(
ID NUMBER,
STARTTIME TIMESTAMP,
ENDTIME TIMESTAMP,
TYPE VARCHAR2(100)
)
Run Code Online (Sandbox Code Playgroud)
我有两个不同的TYPE's:TYPEA和TYPEB.具有独立的开始和结束时间,它们可以重叠.我想要找到的是TYPEB那个开始的时期,完全包含或在给定的时期内结束TYPEA.
这是我到目前为止提出的(有一些样本数据)
WITH mydata
AS (SELECT 100 ID,
To_timestamp('2015-08-01 11:00', 'YYYY-MM-DD HH24:MI') STARTTIME,
To_timestamp('2015-08-01 11:20', 'YYYY-MM-DD HH24:MI') ENDTIME,
'TYPEA' TYPE
FROM dual
UNION ALL
SELECT 110 ID,
To_timestamp('2015-08-01 11:30', 'YYYY-MM-DD HH24:MI') STARTTIME,
To_timestamp('2015-08-01 11:50', 'YYYY-MM-DD HH24:MI') ENDTIME,
'TYPEA' TYPE
FROM dual
UNION ALL
SELECT 120 ID,
To_timestamp('2015-08-01 12:00', 'YYYY-MM-DD HH24:MI') STARTTIME,
To_timestamp('2015-08-01 12:20', 'YYYY-MM-DD HH24:MI') ENDTIME, …Run Code Online (Sandbox Code Playgroud) 给定一个rating在MySQL数据库中命名的表.
+-------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------------+------+-----+---------+----------------+
| rating_id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| prod_id | bigint(20) unsigned | YES | MUL | NULL | |
| rating_num | int(10) unsigned | YES | | NULL | |
| ip_address | varchar(45) | YES | | NULL | |
| row_version | bigint(20) unsigned | NO | | 0 | | …Run Code Online (Sandbox Code Playgroud) 在准备问题dplyr 或 data.table的答案以计算 R 中的时间序列聚合时,我注意到我确实得到了不同的结果,具体取决于表是就地更新还是作为新对象返回。此外,当我更改非等连接条件中的列顺序时,我确实得到了不同的结果。
目前,我对此没有解释,可能是由于我这边的重大误解或简单的编码错误。
请注意,这个问题特别要求解释观察到的
data.table连接行为。如果您对潜在问题有其他解决方案,请随时发布原始问题的答案。
最初的问题是如何使用这些数据计算每位患者在住院前 365 天内的住院次数(包括实际住院次数):
library(data.table) # version 1.10.4 (CRAN) or 1.10.5 (devel built 2017-08-19)
DT0 <- data.table(
patient.id = c(1L, 2L, 1L, 1L, 2L, 2L, 2L),
hospitalization.date = as.Date(c("2013/10/15", "2014/10/15", "2015/7/16", "2016/1/7",
"2015/12/20", "2015/12/25", "2016/2/10")))
setorder(DT0, patient.id, hospitalization.date)
DT0
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)patient.id hospitalization.date 1: 1 2013-10-15 2: 1 2015-07-16 3: 1 2016-01-07 4: 2 2014-10-15 5: 2 2015-12-20 6: 2 2015-12-25 7: 2 …
self-join ×10
sql ×5
join ×4
mysql ×3
activerecord ×1
associations ×1
data.table ×1
foreign-keys ×1
hibernate ×1
innodb ×1
jpa ×1
many-to-many ×1
oracle ×1
parent-child ×1
performance ×1
phpmyadmin ×1
r ×1
sql-server ×1
t-sql ×1