Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 双表条件查询_Mysql - Fatal编程技术网

Mysql 双表条件查询

Mysql 双表条件查询,mysql,Mysql,我在下面提到了两个表格: Table1 ID key Val1 Date1 A-1 xyz-ze AA 2018-10-01 15:16:20 A-1 xyz-ze AC 2018-10-02 18:19:40 A-2 xyi-ze BV 2018-07-01 15:16:20 A-2 xyi-ze

我在下面提到了两个表格:

Table1
ID        key          Val1         Date1
A-1       xyz-ze       AA           2018-10-01 15:16:20
A-1       xyz-ze       AC           2018-10-02 18:19:40
A-2       xyi-ze       BV           2018-07-01 15:16:20
A-2       xyi-ze       CR           2018-03-01 19:22:37
A-2       xyi-ze       BR           2018-10-03 21:17:24

Table2
ID        key          Val2         Date2
A-1       xyz-ze       AA           2018-10-01 15:16:20
A-2       xyi-ze       BR           2018-10-03 22:47:56
通过使用上面的表,我想获取Val1和Val2,但是考虑到Date1,Val1应该是最早的值,然后将Val1与Val2匹配,并基于此给出状态

所需输出:

ID    key     Val1  Val2 Date1                Date2                Status
A-1   xyz-ze  AA    AA   2018-10-01 15:16:20  2018-10-01 15:16:20  TRUE
A-2   xyi-ze  CR    BR   2018-03-01 19:22:37  2018-10-01 15:16:20  FALSE

您可以使用自联接:

SELECT t1.ID, t1.`key`, t1.Val1,  t1.Date1, t2.Date1
FROM Table1 t1
LEFT JOIN Table1 t2 
   ON t1.ID = t2.ID AND t1.`key` = t2.`key` AND t2.Date1 < t1.Date1
通过这种方式,您可以使用以下各项确定最早的每组记录:

WHERE t2.Date1 IS NULL
因此,最终查询将是:

SELECT t1.ID, t1.`key`, t1.Val1, t3.Val2, t1.Date1, t3.Date2
FROM Table1 t1
LEFT JOIN Table1 t2 ON t1.ID = t2.ID AND t1.`key` = t2.`key` AND t2.Date1 < t1.Date1
INNER JOIN Table2 AS t3 ON t1.ID = t3.ID AND t1.`key` = t3.`key` 
WHERE t2.Date1 IS NULL

它给了我价值2的价值Null@VectorJX这是不可能的,因为表2内部连接到表1。可能是你打错了表格别名?
SELECT t1.ID, t1.`key`, t1.Val1, t3.Val2, t1.Date1, t3.Date2
FROM Table1 t1
LEFT JOIN Table1 t2 ON t1.ID = t2.ID AND t1.`key` = t2.`key` AND t2.Date1 < t1.Date1
INNER JOIN Table2 AS t3 ON t1.ID = t3.ID AND t1.`key` = t3.`key` 
WHERE t2.Date1 IS NULL