两个表
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
答案 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
条件。
在联接中使用!=
运算符会给您带来意想不到的结果。