mysql - 有没有一种方法可以选择一个值并将其他相同的值转换为 null

标签 mysql sql

我有 3 个连接的表,我有一个查询可以从它们中获取值。它们都有重复项。现在我需要 2 个表中的所有重复项,但我只想从第三个表中获取第一个不同的值,其他值转换为 NULL。

这是我的查询:

SELECT 
  operacije.nazivEng, slike.img_name, izvestaji.operacija 
FROM izvestaji 
  INNER JOIN operacije
    ON izvestaji.operacijaId=operacije.id 
  INNER JOIN slike 
    ON izvestaji.id=slike.izvestajId 
WHERE izvestaji.operacija IN (
    SELECT operacija 
    FROM izvestaji 
     WHERE projekatId='8' 
        AND datum='2019-10-03' 
     GROUP BY operacija) 
  AND izvestaji.projekatId='8' AND izvestaji.datum='2019-10-03' 
GROUP BY slike.img_name,operacije.nazivEng, izvestaji.operacija 
ORDER BY operacije.nazivEng DESC;

看图

Image of table



我也试过这个

SELECT 
  operacije.nazivEng, slike.img_name, izvestaji.operacija 
FROM izvestaji 
  INNER JOIN operacije 
    ON izvestaji.operacijaId=operacije.id 
  INNER JOIN slike 
    ON izvestaji.id=slike.izvestajId 
WHERE izvestaji.operacija IN (
           SELECT DISTINCT operacija 
           FROM izvestaji 
          WHERE projekatId='8' AND datum='2019-10-03') 
       izvestaji.operacija IN (
                 SELECT operacija 
                 FROM izvestaji 
                 WHERE projekatId='8' AND datum='2019-10-03' 
                 GROUP BY operacija) 
     AND izvestaji.projekatId='8' AND izvestaji.datum='2019-10-03' 
GROUP BY slike.img_name,operacije.nazivEng, izvestaji.operacija 
ORDER BY operacije.nazivEng DESC

最佳答案

如果您使用的是 MySQL 8.0 或更高版本,您可以使用 LAG 分析功能轻松实现这一点 -

SELECT operacije.nazivEng
      ,slike.img_name
      ,CASE WHEN izvestaji.operacija <> LAG(izvestaji.operacija) OVER(PARTITION BY operacije.nazivEng ORDER BY slike.img_name)
                 THEN izvestaji.operacija
            ELSE
                 NULL
       END operacija
FROM izvestaji 
INNER JOIN operacije ON izvestaji.operacijaId=operacije.id 
INNER JOIN slike ON izvestaji.id=slike.izvestajId 
WHERE izvestaji.operacija IN (SELECT operacija 
                              FROM izvestaji 
                              WHERE projekatId='8' 
                              AND datum='2019-10-03' 
                              GROUP BY operacija)
AND izvestaji.projekatId='8'
AND izvestaji.datum='2019-10-03' 
GROUP BY slike.img_name
        ,operacije.nazivEng
        ,izvestaji.operacija 
ORDER BY operacije.nazivEng DESC;

关于mysql - 有没有一种方法可以选择一个值并将其他相同的值转换为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58259962/

相关文章:

php - 如何修复 "Fatal error: Call to undefined function mysqli_connect()"错误?

sql - 在 Access 中使用 Partition() 时遇到问题

mysql - Magento SQL 查询

mysql - 我有值 (abc,123,aed,ghi),我想在我的 sql 中分割各个值

mysql - Scala Slick 元组数据库建模

mysqldump:写入时出现 errno 32

php - 更新时转空值

mysql - 左连接中使用子查询时如何优化查询

sql - 从日期时间获取时间间隔

php - 如何使用 MySQL 制作 PHP/HTML 表单?