【问题标题】:Equivalent MySQL code for the following SQL Server code?以下 SQL Server 代码的等效 MySQL 代码?
【发布时间】:2021-11-04 01:03:09
【问题描述】:

在发现每个唯一的 PropertyAddress 值后,我在 nashvillehousing 表上执行了自连接,以替换 PropertyAddress 列中的 NULL 值具有唯一的 ParcelID 值。

我正在关注的在线教程使用 SQL Server。不幸的是,我无法在我的电脑上安装它。

我正在尝试为以下 SQL Server 代码查找等效的 MySQL 代码。

UPDATE a
SET PropertyAddress = ISNULL(a.PropertyAddress, b.PropertyAddress)
FROM projectportfolio.nashvillehousing a
JOIN projectportfolio.nashvillehousing b
    ON a.ParcelID = b.ParcelID
    AND a.UniqueID != b.UniqueID
WHERE a.PropertyAddress IS NULL

【问题讨论】:

  • 想想你的代码。如果您根据 NULL 筛选您选择的行,那么在设置值时没有充分的理由使用 ISNULL。 a.PropertyAddress 将始终为 NULL,并且您想用 b.PropertyAddress 包含的任何内容覆盖它。但是,您应该忽略 b.PropertyAddress 也是 NULL 的行,因为这在逻辑上不会改变任何内容。学习规则 - 不要执行无意义的更新。

标签: mysql sql sql-server


【解决方案1】:

这应该可行:

UPDATE a
SET PropertyAddress = IFNULL(a.PropertyAddress, b.PropertyAddress)
FROM projectportfolio.nashvillehousing a
JOIN projectportfolio.nashvillehousing b
    ON a.ParcelID = b.ParcelID
    AND a.UniqueID <> b.UniqueID
WHERE a.PropertyAddress IS NULL

【讨论】:

    【解决方案2】:

    在 MySQL 中,这将是:

    UPDATE projectportfolio.nashvillehousing nh JOIN
           projectportfolio.nashvillehousing nh1
           ON nh1.ParcelID = nh.ParcelID AND
              nh1.UniqueID <> nh.UniqueID
        SET nh.PropertyAddress = nh1.PropertyAddress
        WHERE nh.PropertyAddress IS NULL;
    

    注意查询的其他更改:

    • 使用有意义的表别名而不是任意字母。
    • 摆脱ISNULL() -- 或COALESCE()。由于WHERE 子句,这是不必要的。
    • 限定正在更新的列的名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-24
      • 1970-01-01
      • 2011-12-01
      相关资源
      最近更新 更多