MySQL的左外连接排除

weixin_38058086 2019-09-12 03:43:52

我有2代表“conta”和“details”和两个表在不同的情况下,空值和数据 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值的列中的所有空白单元格。








...全文
146 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38060336 2019-09-12
  • 打赏
  • 举报
回复

你最好用SELECT .... FROM a LEFT JOIN b ON conditions WHERE b.id IS NULL风格的查询;空比较有点不同(并且可以处理连接条件)。 例如,这些计算为NULL,这是不是真的,哪个是假的: NULL = NULL 空值(NULL) 但你可以做这样的事情能够更容易地比较空值: ISNULL(A,X)= ISNULL(b,X) (a为null,B是NULL) 所以你连接条件可以是这样的: [...] 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 so on...] WHERE details.id IS NULL 这是假定details具有某种非空行标识字段,可以使用可靠地确定是否匹配。 编辑:您当前的查询(除了我前面提到的空问题)准确的问题是,+是不能在MySQL中串联,这是加法。使用数据显示LOWER(col2) + LOWER(col3) + LOWER(col4)和LOWER(new_column1) + LOWER(new_column2) + LOWER(new_column3)以及产量0的行中没有NULL值。您需要使用CONCAT()函数来执行操作;但我会劝阻它,因为CONCAT('abc', 'def', '')等于CONCAT('ab', 'cd', 'ef')。 旁注:DISTINCT不是一个功能,()将没有效果(比,如果他们包含不止一个结果场可能会导致一个问题等)。 你可以把你的一般格式,和上述空问题,用此格式的简单变化:WHERE (a, b, c) IN (SELECT a, b, c FROM ....
weixin_38075965 2019-09-12
  • 打赏
  • 举报
回复

您可以使用EXISTS运算符来创建一个反半连接。请看看这个链接:https://www.techonthenet.com/mysql/exists.php 实例查询: SELECT id, col1, col2, col3, col4 FROM conta WHERE NOT EXISTS ( SELECT 1 FROM details WHERE conta.col2 LIKE details.new_column1 AND conta.col3 LIKE details.new_column2 AND conta.col4 LIKE details.new_column3 )
weixin_38085883 2019-09-12
  • 打赏
  • 举报
回复

你的问题的解决办法是内加入您的(通讯录)与(详细信息表) 并获得所有列其中(接触。*) Contact.col1!= details.new_column1 这里是一个查询 Select conta.* from conta inner join details on conta.col1!=details.new_column1 你可以和更多凡内柱加入
weixin_38087180 2019-09-12
  • 打赏
  • 举报
回复

您可以执行左连接,然后在第二个表中测试空值以查找第一个表中与第二个表中的任何行不匹配的行。 SELECT a.`id`, a.`col1`, a.`col2`, a.`col3`, a.`col4` FROM `conta` a LEFT JOIN `details` b ON a.`col2` like b.`new_column1` AND a.`col3` like b.`new_column2` AND a.`col4` like b.`new_column3` WHERE b.`id` IS NULL

476

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧