我有一个mySQL数据库,我想从一个表(tableA)获取值(field1),从另一个表(tableB)获取值(Field 2)然后比较它们。如果在表B字段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,基本上我需要一个1-40的列表,没有字段值24和32.
SELECT task_name, tasks.task_id
FROM tasks
INNER JOIN custom_fields_values ON value_object_id =task_id
然而这很好。
答案 0 :(得分:2)
这是因为您使用的是INNER JOIN
- 请尝试使用LEFT 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
祝你好运。
答案 1 :(得分:1)
您需要 anti-semijoin :
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
) ;