当前位置: 首页 > 面试题库 >

SQL-从一个表中查找另一个表中不存在的记录

谷弘致
2023-03-14
问题内容

我有以下两个SQL表(在MySQL中):

Phone_book
+----+------+--------------+
| id | name | phone_number |
+----+------+--------------+
| 1  | John | 111111111111 |
+----+------+--------------+
| 2  | Jane | 222222222222 |
+----+------+--------------+

Call
+----+------+--------------+
| id | date | phone_number |
+----+------+--------------+
| 1  | 0945 | 111111111111 |
+----+------+--------------+
| 2  | 0950 | 222222222222 |
+----+------+--------------+
| 3  | 1045 | 333333333333 |
+----+------+--------------+

如何找出哪些电话是由人,他们提出phone_number是不是在Phone_book?所需的输出将是:

Call
+----+------+--------------+
| id | date | phone_number |
+----+------+--------------+
| 3  | 1045 | 333333333333 |
+----+------+--------------+

任何帮助将非常感激。


问题答案:

有几种不同的方法可以执行此操作,效率各不相同,具体取决于查询优化器的性能以及两个表的相对大小:

这是最简短的陈述,如果您的电话簿很短,则可能是最快的陈述:

SELECT  *
FROM    Call
WHERE   phone_number NOT IN (SELECT phone_number FROM Phone_book)

或者(由于Alterlife)

SELECT *
FROM   Call
WHERE  NOT EXISTS
  (SELECT *
   FROM   Phone_book
   WHERE  Phone_book.phone_number = Call.phone_number)

或(感谢WOPR)

SELECT * 
FROM   Call
LEFT OUTER JOIN Phone_Book
  ON (Call.phone_number = Phone_book.phone_number)
  WHERE Phone_book.phone_number IS NULL

(如其他人所说,忽略它通常最好只选择想要的列,而不是’ *‘)



 类似资料:
  • 问题内容: 我有以下两个表(在MySQL中): 如何找出哪些电话是由人,他们提出是不是在?所需的输出将是: 问题答案: 有几种不同的方法可以执行此操作,效率各不相同,具体取决于查询优化器的性能以及两个表的相对大小: 这是最简短的陈述,如果您的电话簿很短,则可能是最快的陈述: 或(感谢WOPR) (忽略这一点,正如其他人所说的那样,通常最好只选择所需的列,而不是’ ‘)

  • 我在数据库中有两个带有绑定主键的表,我希望在它们之间找到一个不相交的集。例如 有列()和示例数据: 那么,我如何创建一个SQL查询,以便我可以从中获取没有在中的带有ID的行。在这种情况下,应该返回吗? PS:ID是这两个表的主键。

  • 问题内容: 我正在尝试通过任务在《企业指南》中执行此操作,否则,我将仅使用数据步骤。 在数据步骤中,这将是: 问题答案: 这是一种方法。当然还有很多其他的。

  • 问题内容: table1 (id, name) table2 (id, name) 询问: 问题答案: SELECT t1.name FROM table1 t1 LEFT JOIN table2 t2 ON t2.name = t1.name WHERE t2.name IS NULL 问 :这是怎么回事? 答 :从概念上讲,我们从中选择所有行,并为每一行尝试在其中找到具有相同值的行。如果没有这

  • 我想从Laravel 5.1中其他表中不存在的表中获取所有记录。 我知道如何在核心PHP中做到这一点,它与下面的代码工作正常 模型 但是当我尝试在Laravel中使用以下代码时, 然后它给了我这个错误 调用未定义的方法Illumb\Database\Query\Builder::table()

  • 问题内容: 因为显然每个人都讨厌子选择,所以我想使用联接来做到这一点。 举一个令人难以置信的示例,拿两个表,一个表的列表是1-6的数字,而另一个表的列表是偶数的0-8。然后,我的目标是在表格Nums中输出所有奇数。 如果我只想获取Nums中的偶数列表,我会… 但是,如何使用这些表来获取Nums表中的非偶数列表?或者,换句话说,像… 问题答案: 正确使用SubSELECT可以很好…单独的“某人不喜欢