我正在使用以下查询返回大量重复记录。
SELECT * FROM specimen, topography_index, morphology, functions
WHERE
SUBSTRING(specimen.topography_index, 2, 2) = topography_index.topography_index_code
AND
if(specimen.snop_axis = 'M', morphology.morphology_code = specimen.snop_code, functions.functions_code = specimen.snop_code)
AND
specimen.topography_index = '_ORGAN_'
ORDER BY
(specimen.room = 'f') DESC,specimen.snop_code
返回的记录数约为59,000。但是,标本表只有469条记录。形态和函数表各有大约2000条记录,topography_index表有29条记录,所以我猜测结果乘以topography_index'中的记录数。和'形态学'或者'功能'表格(29 x 2000),在if子句中没有联接的表格。
如何编写查询以便不会发生这种情况?
请注意,GROUP BY不是一个选项,因为查询速度太慢而且返回了所有记录。
http://sqlfiddle.com/#!2/2bda8/1
也许这可以通过if子句中的sub select语句来处理吗?
任何帮助表示赞赏!
答案 0 :(得分:0)
您可能需要检查DISTINCT关键字以统一一列或多列上的结果
答案 1 :(得分:0)
我的假设如果这对你不起作用,请创建一个包含4-5条记录的SQLFiddle,以便跟踪错误
更改此
SUBSTRING(specimen.topography_index, 2, 2) = topography_index.topography_index_code
到
specimen.topography_index = SUBSTRING(topography_index.topography_index_code, 2, 2)