MySQL查询内部联接
问题描述:
两个表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
为什么下面的查询从虽然我使用的表将所有eatbles <>
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
答
你应该使用E.Sno != CE.Eatbles_Id
条件WHERE
条款。
使用!=
运算符在加入会给你意想不到的结果。
+0
在where子句中使用它们也会导致意想不到的结果 – bugwheels94 2012-07-26 08:03:43
答
有不同的很好的例子JOIN的上页 http://www.sql-tutorial.ru/en/book_explicit_join_operations/page1.html
的顶端为我更好地使用=在连接查询和之后使用时除外。在用自己的方式:
SELECT E.Name FROM Eatables
EXCEPT ALL
SELECT E.Name FROM Eatables E INNER JOIN
Confirm_Eatables CE ON CE.Eatbles_Id = E.Sno
答
我想你想要的是:
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中没有匹配的所有记录。
你想实现什么? – bugwheels94 2012-07-26 08:01:15
复制发生是因为Sno(2,3,4,5,6)不等于eatables_id(1),sno(1,3,4,5,6)不等于eatables_id(2)等。这会回答这两个问题。 – 2012-07-26 08:02:56
你是否有机会想找出在confirm_eatables表中找不到的食物? – 2012-07-26 08:04:49