我有 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;
看图
我也试过这个
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/