2

我有两个表servicesmember_services

服务

在此处输入图像描述

member_services where 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

但它返回

在此处输入图像描述

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

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

4

3 回答 3

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
于 2012-06-28T18:00:10.460 回答
0

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

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

于 2012-06-28T18:04:17.650 回答
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)。

我希望它有所帮助。如果您需要进一步的帮助,请告诉我。

于 2012-06-28T18:11:13.460 回答