2012-06-28 64 views
2

我有两个表服务member_services的MySQL:查询不会返回正确的结果

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

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

回答

0

你查询的罚款。之所以返回member_type_id = 2是因为你有一排服务叫做member_type_id,它不对应于member_services中的member_type_id。

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

+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 
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 

我改变了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)。

我希望它有帮助。让我知道你是否需要进一步的帮助。