如何使用父ID遍历数据库表?

时间:2014-07-26 21:40:33

标签: mysql sql traversal

我们有MYSQL表,其中包含ID,PARENT_ID和合同条款:

CONTRACTTERM

+-----------------+-------------+------+-----+---------+
| Field           | Type        | Null | Key | Default |
+-----------------+-------------+------+-----+---------+
| ID              | bigint(20)  | NO   | PRI | NULL    |
| PARENT_ID       | bigint(20)  | YES  | MUL | NULL    |
| FROM_DATE       | date        | YES  | MUL | NULL    |
| TO_DATE         | date        | YES  | MUL | NULL    |

要查找FROM_DATE和TO_DATE,需要使用parent_id进行遍历,直到parent_id为NULL。然后,最后一个父母FROM_DATE和TO_DATE显示合同条款。是否可以使用SQL找到这些日期?

其中一个选项是使用以下SQL,但仅当我们知道迭代次数时它才有效:

SELECT t1.ID, t4.FROM_DATE, t4.TO_DATE FROM CONTRACTTERM t1, CONTRACTTERM t2, 
CONTRACTTERM t3, CONTRACTTERM t4  WHERE t1.ID in (27533, 57665, 58057) 
and t2.ID=t1.PARENT_ID  
and t3.ID=t2.PARENT_ID  
and t4.ID=t3.PARENT_ID 
and t4.PARENT_ID IS NULL
ORDER BY t4.TO_DATE DESC;

1 个答案:

答案 0 :(得分:0)

您应该可以使用LIMIT和ORDER BY来获取这些日期。如果您正在寻找特定PARENT_ID的最新合约日期,请尝试以下方式:

  

SELECT * FROM CONTRACTTERM WHERE PARENT_ID =(:parent_id)ORDER BY   TO_DATE DESC LIMIT 1

如果您尝试使用非空PARENT_ID获取任何合约的最新日期,请尝试:

  

SELECT * FROM CONTRACTTERM WHERE PARENT_ID不是NULL ORDER BY   TO_DATE DESC LIMIT 1

ps:我发现了这个信息 http://www.mysqltutorial.org/mysql-limit.aspxhttp://www.techonthenet.com/sql/is_not_null.php