从表Y中过滤表X中的值

时间:2010-12-08 09:34:40

标签: sql mysql

我想要实现的一个简化示例:

表1

FirstName | LastName | Age | Eye Color |
---------------------------------------|
John      | Dunbar   | 30  | Blue      |
Jane      | Austin   | 98  | Green     |
John      | Dunbar   | 21  | Red       |
John      | Dunbar   | 23  | Brown     |
Mr        | T        | ...             |
One       | More     | ...             |

表2

FirstName | LastName |
---------------------|
John      | Dunbar   |
Mr        | T        | 

所以,我想创建的是表1,没有所有记录匹配表2。 换句话说,表3:

FirstName | LastName | Age | Eye Color |
---------------------------------------|
Jane      | Austin   | 98  | Green     |
One       | More     | ...             |

我不确定到达那里最好的“选择”是什么。我猜测“加入”的一些聪明用法,但不确定......

2 个答案:

答案 0 :(得分:5)

表3 - 从Table1中选择表2中没有的行

  CREATE TABLE Table3
  SELECT t1.* from Table1 t1
  WHERE NOT EXISTS(Select 1 from Table2 t2 
                   WHERE t1.FirstName = t2.FirstName
                     AND t1.LastName = t2.LastName)

表3 - 从Table2中选择表2中的行

  CREATE TABLE Table3
  SELECT t1.* from Table1 t1
  WHERE EXISTS(Select 1 from Table2 t2 
                   WHERE t1.FirstName = t2.FirstName
                     AND t1.LastName = t2.LastName)

答案 1 :(得分:0)

来自Table1的SELECT *,其中FirstName不在(从Table2中选择Firstname)而LastName不在(从Table2中选择LastName)

这应该有效