Sql 从字段值与另一个字段值相同的表中选择值
表中有以下列:FDA_ID和FDA_ID_PARENT以及以下数据集:Sql 从字段值与另一个字段值相同的表中选择值,sql,sql-server,Sql,Sql Server,表中有以下列:FDA_ID和FDA_ID_PARENT以及以下数据集: FDA_ID | FDA_ID_PARENT 771 | NULL 772 | 771 773 | 771 774 | 0 775 | NULL 776 | 775 777 | NULL 我有FDA_ID=773作为输入数据,希望将这些数据“链接”到它 我所说的链接是指那些FDA_ID与FDA_ID=773的FDA_ID父母拥有相同的FD
FDA_ID | FDA_ID_PARENT
771 | NULL
772 | 771
773 | 771
774 | 0
775 | NULL
776 | 775
777 | NULL
我有FDA_ID=773作为输入数据,希望将这些数据“链接”到它
我所说的链接是指那些FDA_ID与FDA_ID=773的FDA_ID父母拥有相同的FDA_ID
以及那些与FDA\u ID=773的FDA\u ID\u父代具有相同FDA\u ID\u父代的患者
因此,在FDA_ID=773的情况下,查询将返回
FDA_ID=771、772和773
我尝试了以下查询,但不起作用:
select *
from FDA_TABLE FDA
where
FDA.FDA_ID = 773
or
FDA.FDA_ID in (select FDA_ID from FDA_TABLE where FDA_ID_PARENT = FDA.FDA_ID_PARENT);
有什么帮助吗?您的
WHERE
子句的第二部分返回所有具有父集合的行
FDA.FDA_ID in (select FDA_ID from FDA_TABLE where FDA_ID_PARENT = FDA.FDA_ID_PARENT)
您可能希望使用以下内容(或其任何部分):
那么你真的想要两个选择
(select FDA_ID_PARENT from FDA_TABLE where FDA_ID=773)
union all
(select FDA_ID from FDA_TABLE where FDA_ID_PARENT=(select FDA_ID_PARENT from FDA_TABLE where FDA_ID=773))
您可以这样做:
select *
from FDA_TABLE
where coalesce((select FDA_ID_PARENT from FDA_TABLE where FDA_ID = 773), 0)
in (FDA_ID, coalesce(FDA_ID_PARENT, 0))
如果FDA\u ID\u PARENT=0
与FDA\u ID\u PARENT=NULL
不同,则将coalesce()
中的0
s更改为类似-1
的值,该值在FDA\u ID\u PARENT
列中无效请参阅。
结果:
您的问题不清楚,请提供样本数据和output@ZaynulAbadinTuhin当前位置我不理解你的评论。我确实提供了一个示例数据,并给出了一个基于给定输入的输出示例。谢谢。如果772有“孩子”或771有“父母”呢?或者您的数据仅限于父母和子女(而不是孙子女/父母等)?@JMabee:在OP的示例数据中,给定773的parentID是771。在第二个查询中,我需要parentID中包含这个771的所有行的FDA_ID,它应该给我772和773。
select *
from FDA_TABLE
where coalesce((select FDA_ID_PARENT from FDA_TABLE where FDA_ID = 773), 0)
in (FDA_ID, coalesce(FDA_ID_PARENT, 0))
> FDA_ID | FDA_ID_PARENT
> -----: | :------------
> 771 | null
> 772 | 771
> 773 | 771