我有点像SQL查询的新手,特别是任何包含逻辑的东西,尽管在这种情况下我已经花了数小时的时间来寻找精确的搜索词,却并不容易!我确定一个相对简单的人:
一个表有2列,每行包含有关程序中函数的数据。某些功能具有关联的父功能(用于分组)。列A是唯一功能ID。如果适用,列B指示父函数的ID。所有父功能ID是独立有效的功能ID,它们存在于A列的其他位置。
为了进行报告,我需要列出按其父ID分组的功能,并列出带有子功能的父功能。我可以通过父函数ID轻松报告,但问题是父函数不知道它是父函数,因为其列B为空!
我需要做的是完成B列中的值(如果为空)并且该函数在其他地方作为父函数引用。
除非另有说明,否则 对于 B 列 中具有空值的 每一行 :
我有什么:(查询:SELECT function_id, parent_function FROM functions)
SELECT function_id, parent_function FROM functions
FUNCTION_ID PARENT_FUNCTION 4 13 4 79 138 4 195 314 345 345
我需要具备的条件:
FUNCTION_ID PARENT_FUNCTION 4 4 13 4 79 138 4 195 314 345 345 345
有任何想法吗?我迫不及待想要更熟悉SQL!提前谢谢。
这应该为您工作:
UPDATE functions SET parent_function = function_id WHERE parent_function IS NULL AND function_id IN (SELECT parent_function FROM functions)
它将设置为parent_function等于function_id尚未设置的位置,以及它在parent_function列中某处出现的位置。
parent_function
function_id
如果您实际上不想修改表数据,但仍返回所需的值,则可以使用类似的逻辑,例如:
SELECT f.function_id, COALESCE(f.parent_function, f2.function_id) as parent_function FROM functions f LEFT JOIN functions f2 ON f.function_id = f2.function_id AND f2.function_id IN (SELECT parent_function FROM functions)