SQL JOIN有条件地有多行

时间:2017-05-20 17:05:59

标签: php sqlite join

我在SQLite数据库中有2个表,我通过PHP访问它 这是样本数据,它足以描述我想要做的但不是为什么 让我们称这些表为:TableATableBTableC

------------------------
|  Unique_ID  |  Name  |
------------------------
|  1          | Sam    |
------------------------
|  2          | Bob    |
------------------------
|  3          | Jill   |
------------------------

*Assume more rows for other possible foreign keys below
--------------------------------------------
|  Unique_ID  |  Foreign_Key  | Time_Stamp |
--------------------------------------------
|  1          | 1             | 1495298339 |
--------------------------------------------
|  2          | 1             | 1495298350 |
--------------------------------------------
|  3          | 1             | 1495298365 |
--------------------------------------------

我想要的输出是什么?

------------------------------------
|  Name  | First_Time |  Last_Time |
------------------------------------
|  Sam   | 1495298339 | 1495298365 |
------------------------------------
|  Jill  | 1495298787 | 1495298805 |
------------------------------------

基本上我想把第一张和最后一张时间戳放到第一张表中,但是我不知道怎么做这个连接线,或者如果它甚至可能,多层选择查询的结果有限,只有1?<登记/>
我希望有一种方法可以避免遍历TableA中的每个值并进行两个单独的查询来获取Time_Stamp中的第一个(最低)和最后一个({1}}

3 个答案:

答案 0 :(得分:2)

您可以在第一个表和第二个表的已处理版本之间进行连接。第二个表是使用Foreign_Key的组,计算值是Time_Stamp的最小值和最大值。像这样:

select A.Unique_Id, B.First_Time, B.Last_Time
from TableA as A
join (
    select Foreign_Key, min(Time_Stamp) as First_Time, max(Time_Stamp) as Last_Time
    from Table B
    group by Foreign_Key
) as B
on A.Unique_Id = B.Foreign_Key

答案 1 :(得分:1)

SELECT table1.Name, MIN( table2 .Time_Stamp ) AS firstTime, MAX( table2 .Time_Stamp ) AS lastTime
FROM  `table1` 
LEFT OUTER JOIN table2 ON table1.Unique_Id = table2.Unique_Id
GROUP BY table1.Unique_Id

希望这会对你有所帮助。

答案 2 :(得分:1)

SELECT TableA.name, MIN(TableB.timeid), MAX(TableB.timeid) FROM TableA

INNER JOIN TableB ON TableA.id = TableB.TableA_id 

GROUP BY TableB.TableA_id