我有一个查询来查找表中的重复项:
SELECT sofferenze.id_soff, sofferenze.Descrizione
FROM sofferenze
INNER JOIN (
SELECT Descrizione
FROM sofferenze
GROUP BY Descrizione
HAVING count( id ) >1
)dup ON sofferenze.Descrizione = dup.Descrizione
ORDER BY Descrizione ASC
它像一个咒语一样工作,并给我所有重复的行。
我还有另一个查询,它从sofferenze.id_soff开始将在另一个表中给我另一个值:
SELECT cod_fisc
FROM anagrafiche
JOIN `rischiatura` ON anagrafiche.id_ndg = rischiatura.id_ndg
WHERE id_ogg = 'SF000000012'
AND id_ruolo = 'RU010000002'
实际上,第二个查询针对第一个查询返回的每一行运行,在此行
WHERE id_ogg='SF000000012'
中将值“ SF000000012”替换为第一个查询返回的值sofferenze.id_soff。该代码效率不高,因为它运行第二次查询几次。
是否可以合并两个查询?
最佳答案
为什么不将其组合为子查询?
SELECT cod_fisc
FROM anagrafiche
JOIN `rischiatura` ON anagrafiche.id_ndg = rischiatura.id_ndg
WHERE id_ogg IN (SELECT x.id_soff
FROM sofferenze x
WHERE x.Descrizione IN (
SELECT ix.Descrizione
FROM sofferenze ix
GROUP BY ix.Descrizione
HAVING count( * ) >1
))
AND id_ruolo = 'RU010000002'