【发布时间】:2013-04-29 19:51:40
【问题描述】:
我以为我可以解决这个问题,但我遇到了很多问题。我有 3 个表,Table1、Table2 和 Table3。这些桌子是别人设计的,我必须和他们一起工作。它们的设计初衷不是按照今天的方式使用。
底线是我需要能够输入Item_No,这将始终存在于Table2 中。 如果 Item_No 也可以在 Table 3 中找到,可能多次或没有,有时我可以在 @ 中找到 5 次987654328@ 和Table3 中只有 3 次。如果它在Table3 中,它也将在Table1 中。
因此,使用我可以在 Table2 上找到的 Item_No,返回与这些行关联的 Order_qty。然后使用 if exists 得到 Table1.ID where Table1.ID = Table3.ID WHERE Table3.Item_No = Table2.Item_No
我想出了以下内容,它不会给我错误,只是在 C# 填充期间停止代码执行。我让它在Table3 上找到Item_No 并返回它找到的内容,我只更改了这行代码,所以我知道这是问题所在。
这是我能想出但不起作用的方法:
SELECT Table1.ID,
Table2.Order_Qty As [Qty of Full Order], Table2.Item_No As [Set No]
FROM Table2
LEFT JOIN Table3
ON Table2.Item_No = Table3.Item_No
AND Table2.Order_No = Table3.Order_No
LEFT JOIN Table1
ON Table1.Order_No = Table2.Order_No
AND Table1.ID = Table3.ID
WHERE Table2.Item_No = @m_strUserEnteredSeachValue
ORDER BY Table2.Order_No DESC
*示例数据:*
表 1
+----------+--------------+-------------------+
| Order_No | Sub_Order_No | Sub_Order_Contact |
+==========+==============+===================+
| 1 | 1 | John Doe |
+----------+--------------+-------------------+
| 1 | 2 | Jane Doe |
+----------+--------------+-------------------+
| 1 | 3 | Foo |
+----------+--------------+-------------------+
| 1 | 4 | Bar |
+----------+--------------+-------------------+
| 1 | 5 | Foo2 |
+----------+--------------+-------------------+
表 2
+----------+--------------+-------------------+
| Order_No | Item_No | Customer_Item_Name|
+==========+==============+===================+
| 1 | 1 | 1234567890 |
+----------+--------------+-------------------+
| 1 | 2 | 1234567891 |
+----------+--------------+-------------------+
| 1 | 3 | 1234567892 |
+----------+--------------+-------------------+
| 1 | 4 | 1234567893 |
+----------+--------------+-------------------+
| 1 | 5 | 1234567894 |
+----------+--------------+-------------------+
| 1 | 6 | 1234567895 |
+----------+--------------+-------------------+
| 2 | 1 | 0987654321 |
+----------+--------------+-------------------+
| 2 | 2 | 0987654322 |
+----------+--------------+-------------------+
| 2 | 3 | 0987654323 |
+----------+--------------+-------------------+
| 3 | 1 | 1234567893 |
+----------+--------------+-------------------+
还有表 3
+----------+--------------+-------------------+--------------+
| Order_No | Item_No | Customer_Item_Name| Sub_Order_No |
+==========+==============+===================+==============+
| 1 | 1 | 1234567890 | 1 |
+----------+--------------+-------------------+--------------+
| 1 | 2 | 1234567891 | 2 |
+----------+--------------+-------------------+--------------+
| 1 | 3 | 1234567892 | 2 |
+----------+--------------+-------------------+--------------+
| 1 | 4 | 1234567893 | 3 |
+----------+--------------+-------------------+--------------+
| 1 | 5 | 1234567894 | 4 |
+----------+--------------+-------------------+--------------+
| 1 | 6 | 1234567895 | 4 |
+----------+--------------+-------------------+--------------+
| 1 | 4 | 1234567893 | 4 |
+----------+--------------+-------------------+--------------+
我正在寻找的结果:如果我搜索项目 1234567893
+----------+--------------+-------------------+--------------+-------------------+
| Order_No | Item_No | Customer_Item_Name| Sub_Order_No | Sub_Order_Contact |
+==========+==============+===================+==============+===================+
| 3 | 1 | 1234567893 | | |
+----------+--------------+-------------------+--------------+-------------------+
| 1 | 4 | 1234567893 | 3 | Foo |
+----------+--------------+-------------------+--------------+-------------------+
| 1 | 4 | 1234567893 | 4 | Bar |
+----------+--------------+-------------------+--------------+-------------------+
【问题讨论】:
-
所以,我读了你的问题,你解释了你的情况,但没有解释你想要什么
-
看起来不错,您是否尝试过在 Management Studio 中运行它而忽略 C# 和分析?
-
没有明显的理由说明这不起作用。向我们展示更多代码。
-
请问有什么问题吗?另外,你想达到什么目的?
-
@Lamak 抱歉,我真的不使用 SQL,我什至无法弄清楚我正在寻找的设计,我有点依赖我的 Select 语句来解释我的正在寻找。
标签: sql sql-server select join