Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 有没有办法选择一个值,然后将其他相同的值转换为null_Mysql_Sql - Fatal编程技术网

Mysql 有没有办法选择一个值,然后将其他相同的值转换为null

Mysql 有没有办法选择一个值,然后将其他相同的值转换为null,mysql,sql,Mysql,Sql,我有3个连接的表,我有一个查询从中获取一个值。它们都有重复的。现在我需要两个表中的所有副本,但从第三个表中,我只想得到第一个不同的值,另一个转换为NULL 这是我的疑问: SELECT operacije.nazivEng, slike.img_name, izvestaji.operacija FROM izvestaji INNER JOIN operacije ON izvestaji.operacijaId=operacije.id INNER JOIN sl

我有3个连接的表,我有一个查询从中获取一个值。它们都有重复的。现在我需要两个表中的所有副本,但从第三个表中,我只想得到第一个不同的值,另一个转换为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;
看到图片了吗

我也试过这个

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;

我得到这个错误1064-你的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,以了解要使用的正确语法。izvestaji内部的operacija在第7行加入izvestaji上的operacija。operacijaId=Operacja,但是如果我之前删除了izvestaji.operacija,那么我会收到以下错误:``4018-窗口规范中没有针对'lag'的订单列表``您现在可以尝试吗?这是在本地主机上工作得非常好。谢谢但是在我的在线服务器上,我发现了这个错误1064-您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以了解使用第3行“OVERPARTITION BY operacije.nazivEng ORDER BY slike.img_name”附近的正确语法“您知道这里有什么问题吗?您的MySQL版本是什么?我在回答中也提到了这一点,窗口功能只允许在8.0或更高版本上使用。