Mysql 有没有办法选择一个值,然后将其他相同的值转换为null
我有3个连接的表,我有一个查询从中获取一个值。它们都有重复的。现在我需要两个表中的所有副本,但从第三个表中,我只想得到第一个不同的值,另一个转换为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
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或更高版本上使用。