加入与MySQL没有直接关系的表

时间:2011-10-05 00:30:11

标签: mysql

我有一个MySQL查询,根据表与第3个表的关系将2个表连接起来,但它似乎并不总是完全正常工作。查询是:

SELECT a.ID, a.ECPCodeID, a.RegDate, a.BusName, b.ID as RepCodeID, b.RepCode 
FROM ECPs_Registration a, Reps_Codes b 
WHERE SUBSTR(a.ZipCode,1,5) 
IN (
   SELECT SUBSTR(c.Zip,1,5) 
   FROM Reps_Zip c
   WHERE c.RepCodeID = b.ID
)
ORDER BY b.RepCode,a.BusName

如果我从主连接中取出Rep_Codes表并将其放入Reps_Zip选择中,它可以工作,但是我没有从Reps_Codes表中获取我需要的字段:

SELECT a.ID, a.ECPCodeID, a.RegDate, a.BusName
FROM ECPs_Registration a
WHERE SUBSTR(a.ZipCode,1,5) 
IN (
   SELECT SUBSTR(c.Zip,1,5) 
   FROM Reps_Zip c, Reps_Codes b
   WHERE c.RepCodeID = b.ID
)
ORDER BY a.BusName

如何更改此设置以获得与第二个查询相同的结果,但是在结果中获取Reps_Codes字段?

编辑:

如果我这样做,我会得到与第一个查询相同的结果:

SELECT a.ID, a.ECPCodeID, a.RegDate, a.BusName, b.ID as RepCodeID, b.RepCode  
FROM ECPs_Registration a, Reps_Codes b, Reps_Zip c   
WHERE SUBSTR(a.ZipCode,1,5) = SUBSTR(c.Zip,1,5) AND c.RepCodeID = b.ID
ORDER BY b.RepCode,a.BusName

我正在寻找的是获取ECPs_Registration表的所有记录,然后从Reps_Codes表中获取该记录的一些信息。 Reps_Codes通过第三个表Reps_Zip连接到ECPs_Registration。

2 个答案:

答案 0 :(得分:0)

问题似乎是您的ECPs_Registration和Reps_Codes不知道如何“对齐”在一起。你需要告诉MySQL他们在一起的关系。您可以使用JOIN或WHERE子句执行此操作。

您需要从查询中理解的是,您使WHERE ... IN子句的行为类似于过滤器,而不是木匠。

你可能想尝试这个(不保证性能):

SELECT a.ID, a.ECPCodeID, a.RegDate, a.BusName, b.ID as RepCodeID, b.RepCode 
FROM ECPs_Registration a
INNER JOIN Reps_Zip c ON SUBSTR(a.ZipCode,1,5)=SUBSTR(c.Zip,1,5)
INNER JOIN Reps_Codes b ON c.RepCodeID = b.ID
ORDER BY b.RepCode,a.BusName

答案 1 :(得分:0)

查询没有问题,这是Reps_Zip中包含重复邮政编码的问题。