“mysql join with not equal to operator”not working

时间:2015-08-29 14:08:08

标签: mysql

第一次尝试

SELECT s.name,s.email,s.student_id,a.hostel_id,s.image,s.course_id,s.year, s.address
FROM sys_student_account s, sys_room_allotment a
WHERE s.student_id!=a.student_id AND s.name like 'SAMS%'
GROUP BY s.student_id ORDER BY s.name LIMIT 0,20

第二次尝试

SELECT s.name,s.email,s.student_id,a.hostel_id,s.image,s.course_id,s.year, s.address
FROM sys_student_account s, sys_room_allotment a
WHERE NOT(s.student_id=a.student_id) AND s.name like 'SAMS%'
GROUP BY s.student_id ORDER BY s.name LIMIT 0,20

有人可以帮我吗?

2 个答案:

答案 0 :(得分:1)

您需要正确理解联接。您的代码提供的结果与您想要的完全不同。

使用以下代码段:

std::map

注意:检查是否需要from sys_student_account s left join sys_room_allotment a on ( s.student_id=a.student_id) where a.student_id is NULL and s.name like 'SAMS%' 子句并相应地实施。

答案 1 :(得分:0)

连接,无论是隐式连接还是显式连接,都会在两个表之间创建笛卡尔积 - 它将第一个表中的每一行与另一个表中的每一行配对。这个结果通过连接条件缩小,这应该确保根据您的模式根据某些逻辑完成这些匹配。在这种情况下,您试图加入sys_student_account中的行与sys_room_allotment中具有不同student_id的每一行 - 这实际上并不是您想要实现的。一种更简单的方法可能是使用exists运算符而不是连接:

SELECT   s.* -- or any other fields from sys_student_account
FROM     sys_student_account s 
WHERE    NOT EXISTS (SELECT *
                     FROM   sys_room_allotment a
                     WHERE  s.student_id = a.student_id)
ORDER BY s.name