又被sql上一课

pypm 2026-06-23 18:30 1

SQL一直是我的弱项,今天又被上了一课。


需求很简单,两张表里筛重复数据。我让ai写,写了八十多个等值条件,大概长这样:


SELECT xxx
FROM a, b
WHERE a.xxx = b.xxx
AND a.col1 = b.col1
AND a.col2 = b.col2
... -- 八十多个字段

跑完一条数据都没有。

删掉一些感觉不重要的列,出来了几条。

挑了一组贴到 Excel 比对了一下,是满足条件的,但怎么没查出来?


于是二分法排查,反复注释、执行,折腾半天锁定了一个字段 —— 值是 NULL。


两边明明都是NULL,为什么不相等?

一查才明白:SQL里NULL = NULL结果是NULL,不是TRUE,在 WHERE 里直接当 false 处理掉了。

最新回复 (11)
  • Shiyu 06-23 18:32
    1

    所以有“IS NULL and IS NOT NULL”,开发中常用empty string不用null做默认值,也是这个考量

  • pi_infinity 06-23 18:34
    2

    这…确实对SQL弱, = NULL和IS NULL不是一个意思

  • 卷心菜 06-23 18:34
    3

    最近刚遇到,然后ai让我改成 not(filed <=> null)

  • Revisit 06-23 18:42
    4

    那你这不还是走不出这个弱项吗? ^-^

    我到现在都只会喊.“那个谁.来给我写个sql.就…然后…知道了吧”

    真要自己动手的时候.为什么要写sql呢?

    一个函数.全取出来.或者直接取某些关键特征的全部数据.

    不就随便你筛了.为啥非要去搞那sql呢.你是dba吗?你是开发啊.醒醒

  • huanyi 06-23 18:46
    5

    佬友是在哪家大公司,连sql都不需要写了

  • vv 06-23 18:47
    6

    所以最后这种数据 查询sql要怎么改^-^

  • xiaoruan 06-23 19:10
    7

    我也想知道最后这个要怎么查,^-^佬知道的踢一下我

  • cmmu 06-23 19:21
    8
    select *
    from a,b
    where CONCAT_WS(',',a.字段1,a.字段n)=CONCAT_WS(',',b.字段1,b.字段n);
  • Monika 06-23 19:22
    9

    现在不是 MVVM 吗?尽量不直接操作数据库?

  • pypm 楼主 06-23 20:08
    10

    现在是系统上线之后,由于系统bug存在重复的数据,要求筛选并做恢复,所以就写sql了

  • Revisit 06-23 20:22
    11

    小公司.恰恰我认为只有大公司才会写sql吧. ^-^

    代码写好了.业务核心整明白了.也不应该存在什么连表.太冗余的问题啊.

    这点几百千万级的数据量.也没什么优化的意义啊. ^-^

* 帖子来源Linux.do
返回