关于mysql:查看桌子join上的项目?

retrieving items disregarded by a table join?

本问题已经有最佳答案,请猛点这里访问。

我有两个MySQL表。ItemTable是一个简单的项目ID和一些与项目相关的数据。

1
2
3
 --------------------------------------
| ItemId | ItemDescription | ItemPrice |
 --------------------------------------

我有另一个表CategoryTable,负责将项目分类为不同的类别

1
2
3
  --------------------------------------
| ItemId | CategoryId                   |
 ---------------------------------------

并非所有项目都被分类。在不更改两个表的模式的情况下,找到未分类项(按其ID)的最快/最有效的方法是什么?我试着把ItemId上的两张桌子连在一起,但它忽略了未分类的项目。


只需从CategoryTable中选择ItemIds,然后在ItemTable中选择那些不在CategoryTable中的ID。

1
2
3
4
SELECT ItemId
FROM ItemTable
WHERE ItemId NOT IN (SELECT C.ItemId
                     FROM CategoryTable C);

如果你想要每个ItemId和它的Category,并且包括那些没有类别的项目,你可以使用LEFT JOIN。这将为未分类项目的Category字段输出NULL

1
2
3
4
SELECT I.ItemId, C.Category
FROM ItemTable I
LEFT JOIN CategoryTable C
ON I.ItemId = C.ItemId;