返回左表中的所有记录,除外

时间:2015-09-14 19:11:41

标签: mysql sql

我有以下表格结构
table_label

 ________________
| id | name      |   
|____|___________|
|  4 |  NAME_1   |
|____|___________|
|  5 |  NAME_2   |
|____|___________|
|  6 |  NAME_3   |
|____|___________|
|  7 |  NAME_4   |
|____|___________|
|  8 |  NAME_5   |
|____|___________|
|  9 |  NAME_6   |
|____|___________|

table_label_changes

 __________________________
| id | before    | after   |
|____|___________|_________|
|  4 |     4     |    5    |
|____|___________|_________|
|  5 |     4     |    6    |
|____|___________|_________|

我正在尝试从 table_label 获取所有记录,但 table_label_changes.before 等于 table_label.id 的记录除外table_label.id 等于 4
所以它应该是这样的:
来自 table_label 的所有记录减去列中的ID,其中“之前”列等于4 在这个例子中我应该得到:

 ________________
| id | name      |   
|____|___________|
|  7 |  NAME_4   |
|____|___________|
|  8 |  NAME_5   |
|____|___________|
|  9 |  NAME_6   |
|____|___________|

我试过了:

SELECT *
FROM table_label tl
JOIN table_label_changes tc
  ON tl.id != tc.before
 AND tl.id = 4

什么都不返回

我也尝试了LEFT JOIN,但它从左表中返回所有记录。

我如何获得上述回复?

1 个答案:

答案 0 :(得分:1)

不幸的是,您的问题不明确,或者您预期的结果不正确,但我认为这可以帮助您: (如果你不想要table_label.id == 4,你可以添加"和id<> 4"到table_label的where条件)

SELECT * FROM table_label tl id不在(FORM table_label_changes之前的SELECT = = 4之前的WHERE)