【问题标题】:Joining 4 Tables in a stored procedure在存储过程中连接 4 个表
【发布时间】:2013-03-18 19:39:59
【问题描述】:

我有四个表,我需要通过存储过程从所有表中获取数据。 表1是主表,布局是这样的

ID  REF1  REF2  Data1
 1   01    11    abc
 2   01    22    def
 3   01    33    ghi

表 2 如下所示

ID  ref2ID  Data2
 1    11     a
 2    99     x

表3

ID  ref3ID  Data3
 1    22     b

表 4

ID  ref4ID  Data4
 1    33     c

如何根据“REF2”列从所有四个表中获取数据。

我尝试过这样的事情,但我没有得到正确的数据。我需要带上 Data1、Data2、Data3 和 Data4 列上的所有记录

Select Table1.Data1,
       Table2.Data2,
       Table3.Data3,
       Table4.Data4,
From   Table1 INNER JOIN
       Table2 ON Table1.REF2 = Table2.Ref2ID INNER JOIN 
       Table3 ON Table1.REF2 = Table3.Ref3ID INNER JOIN
       Table4 ON Table1.REF2 = Table4.Ref4ID
WHERE  REF1 = "01"

我做错了什么?请帮忙

【问题讨论】:

  • 也许你想要一个左连接而不是一个内连接......但这是一个没有更多信息的猜测
  • 我怀疑你想要一个 LEFT OUTER JOIN 而不是 INNER JOIN。表 1 中是否存在表 2、表 3 或表 4 中没有对应行的记录?无论如何,您都想查看 Table1 行吗?在这种情况下,请使用 LEFT OUTER JOIN
  • 谢谢你,梅兰妮……是的,我也需要表 1 中的数据……我现在正在尝试你的建议
  • 根据您的样本数据,无法加入Table 3或表4,只能加入表1和表2。
  • @Icarus Table 1 REF2 column = Table3 ref3ID.. 这不可能吗?

标签: c# sql-server-2008 stored-procedures


【解决方案1】:

在这种情况下尝试使用LEFT JOINs,amd 也对字符串使用单引号:

SELECT Table1.Data1,
       Table2.Data2,
       Table3.Data3,
       Table4.Data4
FROM   Table1 
LEFT JOIN Table2 
    ON Table1.REF2 = Table2.Ref2ID 
LEFT JOIN Table3 
    ON Table1.REF2 = Table3.Ref3ID 
LEFT JOIN Table4 
    ON Table1.REF2 = Table4.Ref4ID
WHERE  REF1 = '01'

Here is a sqlfiddle 有一个演示供您试用。

【讨论】:

    猜你喜欢
    • 2021-06-21
    • 1970-01-01
    • 2023-03-09
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多