MySQL - 选择字段不相等的行

时间:2016-04-30 08:50:19

标签: mysql select

我对SQL查询有一点问题:我的'TableA'有一个字段'TableA.b',其中包含'TableB'的ID。我想从'TableB'中选择没有ID等于任何字段'TableA.b'的所有行。换句话说,我需要TableB中的每一行,而TableA中的任何行都没有引用它。 我试过像这样的查询:

SELECT DISTINCT TableB.* FROM TableA, TableB Where TableA.b != TableB.ID

但是结果包含一个也由否定返回的行,即两个字段具有相同值的行。 有任何想法吗?

5 个答案:

答案 0 :(得分:1)

您需要的是LEFT (or RIGHT) JOIN

self.searchController.presentViewController(vc, animated: false, completion: nil)

虽然可以使用子查询来执行相同的操作,但在某些otehr答案中也是如此。加入通常为faster

  

LEFT [OUTER] JOIN可能比同等的子查询更快,因为   服务器可能能够更好地优化它 - 事实并非如此   特定于MySQL服务器。在SQL-92之前,外连接没有   存在,所以子查询是做某些事情的唯一方法。今天,   MySQL Server和许多其他现代数据库系统提供了广泛的范围   外连接类型。

答案 1 :(得分:0)

你可以试试这个

  SELECT TableB.* FROM TableB
  WHERE ID NOT IN
       (SELECT b from TableA);

答案 2 :(得分:0)

首先,从TableA中选择所有ID:

SELECT DISTINCT b FROM TableA

然后使用该结果通过将上述查询用作子查询来选择TableB中具有该集合中不存在的id的所有行:

SELECT * FROM TableB WHERE ID NOT IN (SELECT DISTINCT b FROM TableA)

希望这有帮助。

答案 3 :(得分:0)

在SELECT Query中使用NOT IN

SELECT * FROM TableB t1 WHERE t1.ID NOT IN (SELECT t2.b FROM TableA t2);

答案 4 :(得分:0)

您也可以使用右连接。 试试这个:

SELECT DISTINCT TableB.* FROM  tablea RIGHT JOIN TableB ON TableA.b = Tableb.ID WHERE TableA.B IS NULL
相关问题