我有两个表服务和 member_services
从 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
但它返回
为什么它会返回 member_type_id 2 的记录?
我在查询中犯了什么错误?
答案 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)。
我希望它有所帮助。如果您需要进一步的帮助,请与我们联系。