MySQL:查询没有返回正确的结果

时间:2012-06-28 17:49:56

标签: mysql

我有两个表服务 member_services

services

enter image description here

member_services 获取记录,其中 member_type_id = 1 我写了

SELECT s.* FROM member_services ms 
LEFT JOIN services s 
ON s.ser_id = ms.ser_id 
WHERE ms.mem_id = 1 && ms.pro_id = 9 && ms.member_type_id = 1

但它返回

enter image description here

为什么它会返回 member_type_id 2 的记录?

我在查询中犯了什么错误?

3 个答案:

答案 0 :(得分:0)

试试这个:

SELECT s.* FROM member_services ms LEFT JOIN services s 
ON ms.ser_id = s.ser_id AND ms.member_type_id = s.member_type_id
WHERE ms.mem_id = 1 AND ms.pro_id = 9 AND ms.member_type_id = 1

答案 1 :(得分:0)

你的查询很好。它返回 member_type_id = 2 的原因是因为您在服务中有一行名为member_type_id,与 member_services 中的member_type_id不对应

这里真正的问题是两个表之间的数据冲突。如果它们应该是相同的数据,那么最好使用外键链接两者。

答案 2 :(得分:0)

请尝试此查询:

SELECT s.* FROM member_services ms 
LEFT JOIN services s 
USING(ser_id,member_type_id) 
WHERE ms.mem_id = 1 && ms.pro_id = 9 && s.member_type_id = 1

我为 USING()更改了ON,因为字段被称为相同,它是一种快捷方式。

另一个区别是使用两个字段进行连接(比如执行ON s.ser_id = ms.ser_id AND s.member_type_id = ms.member_type_id)。这样就可以正确应用过滤器了。

最后一次更改是在WHERE子句上,过滤服务表上的member_type_id = 1而不是在member_services表上执行此操作。我的意思是将ms别名改为s)。

我希望它有所帮助。如果您需要进一步的帮助,请与我们联系。