证明问题的一个例子:
ID: The primary key.
argID: A foreign key pointing to another table.
dependentID: A foreign key pointing to the field ID of the table itself.
dependentArgID: A foreign key pointing to the same table as argID.
我想将两个相关的行(具有相同的dependentID)分别合并到一个结果行中,始终选择第一行的日期和下一行的编号:
ID argID dependentID dependentArgID date number
1 1 2 2 2016-06-06 null
2 2 2 null null 1
3 1 4 2 2016-06-07 null
4 2 4 null null 2
...
期望的结果:
argID date dependentArgID number
1 2016-06-06 2 1
1 2016-06-07 2 2
...
简短形式的问题:对于具有相同dependentID
的行,应与date
和number
合并为一行(并且可选地)这些行的argID
和dependentArgID
)。
我尝试过的是自我加入,但我没有得到正确的行分组:
无法正常工作(并且没有其他结果字段):
SELECT `b`.`date`, `a`.`number`
FROM `table` `a` LEFT JOIN `table` `b` ON `a`.`argID` = `b`.`dependentArgID`
WHERE `a`.`argID` = 2
GROUP BY `a`.`dependentID`;
答案 0 :(得分:0)
第一次尝试(见我的帖子)指出了正确的方向。
正确的解决方案是:
SELECT `b`.`argID`, `b`.`date`, `b`.`dependentArgID`, `a`.`number`
FROM `table` `a`
CROSS JOIN `table` `b`
ON `a`.`ID` = `b`.`dependentID`
WHERE `a`.`argID` = 2 AND `b`.`date` IS NOT NULL
GROUP BY `a`.`dependentID`;
感谢大脑刺激的所有助手。