连接两个表。选择一张表中的所有行,只选择另一张表中的匹配值?

自行车男

我有以下表格:

Locations
+-------------+----------------+
| Location_ID | Location_Name  |
+-------------+----------------+
|           1 | Administration |
|           2 | Parking        |
|           3 | Warehouse      |
|           4 | Shipping       |
|           5 | Factory        |
|           6 | Office         |
|           7 | Processing     |
+-------------+----------------+

Item_Quantity
+---------+-------------+-------------------+
| Item_ID | Location_ID | Location_Quantity |
+---------+-------------+-------------------+
|       1 |           3 |                10 |
|       1 |           5 |                50 |
|       2 |           3 |                 7 |
+---------+-------------+-------------------+

我正在尝试获取具有指定 Item_ID 的 Location_Quantity 的所有 Location_ID 和 Location_Names 的列表。

Item_ID = 1 的预期结果是:

+-------------+----------------+-------------------+
| Location_ID | Location_Name  | Location_Quantity |
+-------------+----------------+-------------------+
|           1 | Administration |                 0 |
|           2 | Parking        |                 0 |
|           3 | Warehouse      |                10 |
|           4 | Shipping       |                 0 |
|           5 | Factory        |                50 |
|           6 | Office         |                 0 |
|           7 | Processing     |                 0 |
+-------------+----------------+-------------------+

Item_ID = 2 的预期结果是:

+-------------+----------------+-------------------+
| Location_ID | Location_Name  | Location_Quantity |
+-------------+----------------+-------------------+
|           1 | Administration |                 0 |
|           2 | Parking        |                 0 |
|           3 | Warehouse      |                 7 |
|           4 | Shipping       |                 0 |
|           5 | Factory        |                 0 |
|           6 | Office         |                 0 |
|           7 | Processing     |                 0 |
+-------------+----------------+-------------------+

我尝试了以下查询:

SELECT l.Location_ID, l.Location_Name, iq.Location_Quantity
FROM Locations l
LEFT JOIN Item_Quantity iq ON l.Location_ID = iq.Location_ID
WHERE iq.Item_ID = @Item_ID

SELECT l.Location_ID, l.Location_Name, iq.Location_Quantity
FROM Item_Quantity iq
LEFT JOIN Locations l ON l.Location_ID = iq.Location_ID
WHERE iq.Item_ID = @Item_ID

SELECT l.Location_ID, l.Location_Name, Location_Quantity = iif(iq.Location_Quantity IS NOT NULL, iq.Location_Quantity, 0)
FROM Locations l
LEFT JOIN Item_Quantity iq ON l.Location_ID = iq.Location_ID
WHERE iq.Item_ID = @Item_ID

所有查询仅返回条目在 Item_Quantity 中的行。

对于上述任何查询,这就是我为 Item_ID = 1 得到的结果:

+-------------+----------------+-------------------+
| Location_ID | Location_Name  | Location_Quantity |
+-------------+----------------+-------------------+
|           3 | Warehouse      |                10 |
|           5 | Factory        |                50 |
+-------------+----------------+-------------------+

我原以为 Locations 表上的 Left Join 会给我指定列中的所有行,但我一定是理解错误?

谁能看到我在这里做错了什么?

戈登·利诺夫

条件需要放在ON子句中。否则,该WHERE子句会将外连接转换为内连接。

您还想将 the 转换NULL为 a 0,因此请使用COALESCE()

SELECT l.Location_ID, l.Location_Name, COALESCE(iq.Location_Quantity, 0) as Location_Quantity
FROM Locations l LEFT JOIN
     Item_Quantity iq
     ON l.Location_ID = iq.Location_ID AND iq.Item_ID = @Item_ID;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过从SQL Server的另一张表中选择行,将所有行一张一张地插入到空表中

来自分类Dev

连接两张表 - 一张有选择,一张未触及

来自分类Dev

MYSQL:通过同一张表中的两个外键选择

来自分类Dev

试图找到一张表中的所有记录,而不是两张表

来自分类Dev

根据另一张表中的行类型选择行

来自分类Dev

连接同一张表的两行,这些行指向另一张表中的同一事物

来自分类Dev

sql比较同一张表中的两个唯一行

来自分类Dev

为什么我在同一张表中的两个日期之间选择不起作用?

来自分类Dev

从同一张表中获得两个值

来自分类Dev

mysql根据另一张表的数据从一张表中选择数据

来自分类Dev

这两个按钮在csv中打开同一张表有问题吗?

来自分类Dev

根据另一张表Linq的特定值从一张表中选择值

来自分类Dev

将 Excel 中匹配记录的行值从一张工作表复制到另一张工作表

来自分类Dev

如何在一张表中选择两列匹配值的记录?

来自分类Dev

VBA Excel将行从一张工作表复制到另一张工作表中具有特定值的行

来自分类Dev

将行输出到另一张表中

来自分类Dev

将所有日期存储在一张表中

来自分类Dev

当数据可以出现在一张表的多列中时连接两个表的结果

来自分类Dev

根据另一张表中的编号在一张表中插入多行

来自分类Dev

在MySQL中从一张表到另一张表的数据

来自分类Dev

从另一张表中减去一张表

来自分类Dev

使用一张表中的数据查询另一张表

来自分类Dev

如何通过从另一张表中获取ID将值插入到一张表中

来自分类Dev

选择代表两个位置之间范围的行,以便仅包括包含另一张表的至少一个位置的间隔

来自分类Dev

当一行在另一张表中匹配时排除组

来自分类Dev

将值粘贴到另一张工作表中的匹配单元格中

来自分类Dev

Excel Vba - 如何将匹配的行从一张工作表复制并粘贴到另一张工作表中完全匹配的行下方

来自分类Dev

创建表时,从另一张表中选择一个列

来自分类Dev

同一张表上的两个查询显示同一行具有不同的值?

Related 相关文章

  1. 1

    通过从SQL Server的另一张表中选择行,将所有行一张一张地插入到空表中

  2. 2

    连接两张表 - 一张有选择,一张未触及

  3. 3

    MYSQL:通过同一张表中的两个外键选择

  4. 4

    试图找到一张表中的所有记录,而不是两张表

  5. 5

    根据另一张表中的行类型选择行

  6. 6

    连接同一张表的两行,这些行指向另一张表中的同一事物

  7. 7

    sql比较同一张表中的两个唯一行

  8. 8

    为什么我在同一张表中的两个日期之间选择不起作用?

  9. 9

    从同一张表中获得两个值

  10. 10

    mysql根据另一张表的数据从一张表中选择数据

  11. 11

    这两个按钮在csv中打开同一张表有问题吗?

  12. 12

    根据另一张表Linq的特定值从一张表中选择值

  13. 13

    将 Excel 中匹配记录的行值从一张工作表复制到另一张工作表

  14. 14

    如何在一张表中选择两列匹配值的记录?

  15. 15

    VBA Excel将行从一张工作表复制到另一张工作表中具有特定值的行

  16. 16

    将行输出到另一张表中

  17. 17

    将所有日期存储在一张表中

  18. 18

    当数据可以出现在一张表的多列中时连接两个表的结果

  19. 19

    根据另一张表中的编号在一张表中插入多行

  20. 20

    在MySQL中从一张表到另一张表的数据

  21. 21

    从另一张表中减去一张表

  22. 22

    使用一张表中的数据查询另一张表

  23. 23

    如何通过从另一张表中获取ID将值插入到一张表中

  24. 24

    选择代表两个位置之间范围的行,以便仅包括包含另一张表的至少一个位置的间隔

  25. 25

    当一行在另一张表中匹配时排除组

  26. 26

    将值粘贴到另一张工作表中的匹配单元格中

  27. 27

    Excel Vba - 如何将匹配的行从一张工作表复制并粘贴到另一张工作表中完全匹配的行下方

  28. 28

    创建表时,从另一张表中选择一个列

  29. 29

    同一张表上的两个查询显示同一行具有不同的值?

热门标签

归档