在第二个查询中查询两个单独的表传递结果,同时仅在第二个查询返回 null 时保留第一个查询的结果

Posted

技术标签:

【中文标题】在第二个查询中查询两个单独的表传递结果,同时仅在第二个查询返回 null 时保留第一个查询的结果【英文标题】:Query two separate tables passing results within the second query while only keeping the results of the first query if the second query returns null 【发布时间】:2015-02-09 11:51:58 【问题描述】:

查询一个表然后将结果传递给另一个表中的另一个查询的最佳方法是什么,但只有在第二个查询返回 null 或为空时才保留第一个查询的结果?

我正在尝试SELECT id, name, email FROM ACCOUNT WHERE email IN ('George@yahoo.com', 'Tom@aol.com') 然后获取返回的 id 和 SELECT memberId=1 and member2Id = (the returned id) FROM FAMILY IF NULL。如果它为 NULL,则返回第一个查询中的数据,否则从第一个查询的结果中删除该成员。

最有效的方法是什么?最初我打算做第一个查询。然后将生成的 id 传递到一个数组中。然后遍历在第二个查询中传递 id 的数组,如果它返回不为 null,那么我将从数组中删除 id。然而,这似乎非常低效,因为我将运行两个单独的查询。我是 SQL 新手,所以如果有更好的方法可以做到这一点,我很想学习,谢谢!

【问题讨论】:

您的第一个查询与第二个查询的关系以及您的第二个查询似乎错误的另一件事请把您的完整查询作为第二个查询可能喜欢 SELECT memberid1, (select member id from x) as menberid2 from family其中列为空。 它们是相关的。第一个查询根据用户的电子邮件检索用户的 ID。然后在 FAMILY 表中将该 ID 用作第二个查询的 member2Id。如果第二个查询为空,则成员不相关。如果它们不相关(由第二个查询确定),那么我想要用户 ID、姓名和电子邮件(由第一个查询检索)。这是否回答你的问题?上面的查询不一定正确,只是我试图解释更多关于我正在尝试做的事情。 是的。所以在这里你可以使用相关查询来获得期望的输出。你能不能建立你的相关查询。告诉我。 【参考方案1】:

认为你在说什么,但你可能需要扩展你的解释:

SELECT id, name, email FROM ACCOUNT 
WHERE email IN ('George@yahoo.com', 'Tom@aol.com')
   AND id not in (select member2Id from FAMILY where memberId=1)

【讨论】:

我认为这真的很接近!谢谢我要玩这个。对于第二部分,它必须采用两个参数,即 memberId 和 member2Id。 memberId 由运行语句的人提取,member2Id 是在第一个查询中找到的 id。 你做到了!你是男人,非常感谢你!一旦我获得更多代表,我就会对此投赞成票。我被这个困扰太久了。我的 php 解决方案会慢得多。你有什么书籍或教程可以推荐吗? 不客气,bsub。抱歉,没有可推荐的特定 SQL 教程——我从经验中学到了很多东西。一个很好的学习方法是在这里不断提问:)

以上是关于在第二个查询中查询两个单独的表传递结果,同时仅在第二个查询返回 null 时保留第一个查询的结果的主要内容,如果未能解决你的问题,请参考以下文章

仅在第一个组件通过验证时有条件地更新第二个组件

表的集合操作

了解 Oracle 别名 - 为啥在查询中不识别别名,除非包装在第二个查询中?

使用单独的foreach在一行中显示两个div

我有两个带外键的表,我想在第一个表中按下外键,第二个表出现数据

在同一页面中使用两个 BLoC 并在第二个 BLoC 中传递第一个 BLoC 的状态