MySQL - 返回查询乘法记录 - 笛卡尔积

时间:2014-07-09 04:11:37

标签: php mysql sql database

我正在使用以下查询返回大量重复记录。

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语句来处理吗?

任何帮助表示赞赏!

2 个答案:

答案 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)