Mysql查询内连接

时间:2012-07-26 07:57:50

标签: mysql

两个表

tblEatables和tblConfirm_Eatables

tblEatables

Sno     Name  
1      Apples
2      Oranges
3      Papaya
4      Jackfruit
5      Pineapple
6      Mango

tblConfirm_Eatables

Eatbles_Id   Confirm_Status 
     1               0 
     2               1
     3               0
     4               0

问题1

为什么下面的查询带来重复记录集

SELECT E.Name         
FROM Eatables E INNER JOIN 
Confirm_Eatables CE ON CE.Eatbles_Id != E.Sno 

为什么下面的查询带来了表格中的所有食物,虽然我使用了<>

SELECT E.Name         
FROM Eatables E INNER JOIN 
      Confirm_Eatables CE ON E.Sno != CE.Eatbles_Id
GROUP BY E.Name

OP

Name
Apples
Jackfruit
Mango
Oranges
Papaya
Pineapple

3 个答案:

答案 0 :(得分:1)

页面顶部有很多不同的JOIN示例 http://www.sql-tutorial.ru/en/book_explicit_join_operations/page1.html

对我来说,最好在连接查询中使用=并在EXCEPT之后使用。以你的方式:

  SELECT E.Name FROM Eatables 
                EXCEPT ALL
  SELECT E.Name FROM Eatables E INNER JOIN 
         Confirm_Eatables CE ON CE.Eatbles_Id = E.Sno 

答案 1 :(得分:1)

我认为你想要的是:

SELECT a.Name
FROM tblEatables a
LEFT JOIN tblConfirm_Eatables b ON a.Sno = b.Eatables_Id
WHERE b.Eatables_Id IS NULL

这将使tblEatables中不在tblConfirm_Eatables中的所有行。

为了更好地理解其工作原理,请参阅this link以获得在SQL中使用连接的良好视觉指南;特别是第四个,我们使用LEFT JOIN / IS NULL技术来检索表A中表B中没有匹配的所有记录。

答案 2 :(得分:0)

您应该在E.Sno != CE.Eatbles_Id子句中使用此WHERE条件。

在联接中使用!=运算符会给您带来意想不到的结果。