0

我有一个 mySQL 数据库,我想从一个表(tableA)中获取值(field1),从另一个表(tableB)中获取值(字段 2),然后比较它们。如果在 tableB 字段 2 中找到表 A 中的字段 1,则应将它们排除在我的选择中。

SELECT task_name, tasks.task_id
FROM tasks
INNER JOIN custom_fields_values ON value_object_id <>task_id

这是我尝试过的,但似乎不起作用。它一式三份显示 task_id,这很奇怪。value_object_id 只有两个字段 24 和 32。task_id 有数字 1-40,基本上我需要一个没有字段值 24 和 32 的 1-40 的列表。

SELECT task_name, tasks.task_id
FROM tasks
INNER JOIN custom_fields_values ON value_object_id =task_id

然而,这工作正常。

4

2 回答 2

2

这是因为您使用的是INNER JOIN- 尝试使用 aLEFT JOIN代替。

SELECT tasks.task_name, tasks.task_id
FROM tasks
LEFT JOIN custom_fields_values ON custom_fields_values.value_object_id=tasks.task_id
WHERE custom_fields_values.value_object_id IS NULL

祝你好运。

于 2013-01-28T18:54:07.263 回答
1

你需要一个反半连接

SELECT task_name, task_id
FROM tasks AS t
WHERE NOT EXISTS
      ( SELECT *
        FROM custom_fields_values AS c
        WHERE c.value_object_id = t.task_id
      ) ;
于 2013-01-28T18:54:58.613 回答