我有两个表,一个包含对象,一个包含对象的属性。两个表都有一个个人ID和一个日期" key",但由于一个人可以在一天内完成多个对象订单,因此它并不匹配。但我确实知道,两个表中的条目都以相同的顺序输入,因此如果personID和日期相同,则可以加入订单。
这就是我想要完成的事情:
Table 1:
PersonID Date Object
1 20-08-2013 A
2 13-11-2013 B
2 13-11-2013 C
2 13-11-2013 D
3 21-11-2013 E
Table 2:
PersonID Date Property
4 05-05-2013 $
1 20-08-2013 ^
2 13-11-2013 /
2 13-11-2013 *
2 13-11-2013 +
3 21-11-2013 &
Result:
PersonID Date Object Property
4 05-05-2013 $
1 20-08-2013 A ^
2 13-11-2013 B /
2 13-11-2013 C *
2 13-11-2013 D +
3 21-11-2013 E &
所以我想要做的就是加入两张桌子" zip"具有相同(PersonID,Date)" key"的条目组。
称为" Slick"似乎有这个(see here),但我想在SQLite中这样做。
任何建议都会很棒!
答案 0 :(得分:1)
你走在正确的轨道上。为什么不在表之间做LEFT JOIN
,如
select t2.PersonID,
t2.Date,
t1.Object,
t2.Property
from table2 t2
left join table1 t1 on t2.PersonID = t1.PersonID
order by t2.PersonID
答案 1 :(得分:0)
使用其他列使两个表中的每个键都唯一。例如,在SQLite中,您可以使用RowID来跟踪插入顺序。将此附加列存储在数据库本身中对于其他查询也可能很有用,但您不必存储它。
首先将列ID添加到两个表中,DDL查询现在应如下所示:(确保在两个表都填满之前不添加主键约束。
CREATE TABLE table1 (
ID,
PersonID,
Date,
Object
);
CREATE TABLE table2 (
ID,
PersonID,
Date,
Property
);
现在填充ID列。您可以根据自己的喜好调整ID。确保你也为table2执行此操作:
UPDATE table1
SET ID =(
SELECT table1.PersonID || '-' || table1.Date || '-' || count( * )
FROM table1 tB
WHERE table1.RowID >= tB.RowID
AND
table1.PersonID == tB.PersonID
AND
table1.Date == tB.Date
);
现在你可以加入他们:
SELECT t2.PersonID,
t2.Date,
t1.Object,
t2.Property
FROM table2 t2
LEFT JOIN table1 t1
ON t2.ID = t1.ID;