SELECT * FROM `groupon-spain-6sep-2011`, `Hoja1`,`GroupaliaJuly2011`
WHERE `groupon-spain-6sep-2011`.`code`= 5654
OR `Hoja1`.`code` = "5654
OR `GroupaliaJuly2011`.`code` = 5654
答案 0 :(得分:9)
您缺少任何将表格相互关联的连接条件,因此正在进行3个表格的笛卡尔连接。
我建议始终使用显式连接语法
SELECT *
FROM `groupon-spain-6sep-2011`
JOIN `hoja1` ON `groupon-spain-6sep-2011`.foo=`hoja1`.foo
JOIN `groupaliajuly2011` ON `groupaliajuly2011`.`foo` = `hoja1`.foo
WHERE `groupon-spain-6sep-2011`.`code` = 5654
OR `hoja1`.`code` = 5654
OR `groupaliajuly2011`.`code` = 5654
虽然你可能想要一个联盟在这里,但我想呢?
答案 1 :(得分:6)
您提出的查询涉及三个表的笛卡尔积(在标准SQL中也称为CROSS JOIN,感谢@onedaywhen的建议),涉及的记录量将是大小(A)*大小(B)*大小(C)。因此,如果总产品足够大,它将填充大量内存,这将使您的数据库无法响应任何其他请求,这将导致数据库的“冻结”。
我注意到你想要三个指定列中的任何一个是相同的值'5654',所以你可以分别从三个表中选择元组,然后UNION它们,而不是像你正在做的那样做它们的笛卡尔积现在,因为我不认为你制作的笛卡尔产品有任何意义。这将节省大量的内存。
答案 2 :(得分:6)
您可能希望改为使用联盟:
SELECT *
FROM groupon-spain-6sep-2011
WHERE code = 5654
UNION SELECT *
FROM Hoja1
WHERE code = 5654
UNION SELECT *
FROM GroupaliaJuly2011
WHERE code = 5654