【问题标题】: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在第二个查询中查询两个单独的表传递结果,同时仅在第二个查询返回 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、姓名和电子邮件(由第一个查询检索)。这是否回答你的问题?上面的查询不一定正确,只是我试图解释更多关于我正在尝试做的事情。
  • 是的。所以在这里你可以使用相关查询来获得期望的输出。你能不能建立你的相关查询。告诉我。

标签: php mysql mysqli mysql-workbench


【解决方案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 教程——我从经验中学到了很多东西。一个很好的学习方法是在这里不断提问:)
猜你喜欢
  • 1970-01-01
  • 2015-03-16
  • 2013-11-01
  • 2018-12-18
  • 2022-10-07
  • 1970-01-01
  • 2018-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多