我有一个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。
答案 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中包含重复邮政编码的问题。