我有2代表“conta
”和“details
”和两个表在不同的情况下,空值和数据MySQL的左外连接排除
conta
id col1 col2 col3 col4
1 Hi Bye See YOU
2 Hello (NULL) (NULL) (NULL)
details
id new_column1 new_column2 new_column3
1 bye see you
我想联接基于col2=new_column1 and col3 = new_column2 and col4 = new_column3
申请并获得价值存在于conta
,而不是在details
,所以我的输出将是
conta
id col1 col2 col3 col4
2 hello (NULL) (NULL) (NULL)
但不知何故,我不能这样做。我写下面的查询,但它根本不会导致我想要的值。
SELECT `id`,`col1`,`col2`,`col3`,`col4` FROM `conta`
WHERE LOWER(`col2`) + LOWER(`col3`) + LOWER(`col4`) NOT IN (SELECT DISTINCT(LOWER(`new_column1`) + LOWER(`new_column2`) + LOWER(`new_column3`))
FROM `details`);
它只是给我没有结果!在显示屏上
任何帮助?
编辑:我试着在@Uueerdo建议的下面查询,它并没有给我我想要的。
SELECT conta.id,`col1`,`col2`,`col3`,`col4` FROM `conta`
LEFT OUTER JOIN `details`
ON ((conta.col2 IS NULL AND details.new_column1 IS NULL)
OR (LOWER(conta.col2) = LOWER(details.new_column1)))
AND ((conta.col3 IS NULL AND details.new_column2 IS NULL)
OR (LOWER(conta.col3) = LOWER(details.new_column2)))
AND ((conta.col4 IS NULL AND details.new_column3 IS NULL)
OR (LOWER(conta.col4) = LOWER(details.new_column3)))
WHERE details.id IS NULL
在输出中col2
我看到的值“操作”,其也存在于new_column1
在details
表。这意味着,因为我想申请左外连接排除我甚至使用LEFT JOIN代替LEFT OUTER JOIN试过它不应该存在于输出和它不工作要么
EDIT2:我找到了解决方案。查询工作并完成这项工作。 Exept,我不得不运行一个命令来替换我应用连接到NULL值的列中的所有空白单元格。
我认为您需要清理一下您的示例数据;它看起来像第一行的5个字段中有6个值。 – Uueerdo
我的不好!我刚刚纠正了这一点。我其实很好奇,知道为什么它不给我想要的结果。我的意思是我的查询出了什么问题。 – Enthusiast
请参阅编辑我的答案。 – Uueerdo