【问题标题】:Join 4 tables in DB with Stored Procedure?使用存储过程加入数据库中的 4 个表?
【发布时间】:2010-11-02 22:24:15
【问题描述】:

在我的数据库中,有一个表对其他 3 个表有 3 个 FK,当 FK 值 = 其他表中的 PK 值时,我想选择此表中的数据 + 其他 3 个表中的数据

【问题讨论】:

  • sqlzoo.net - 基本 SQL 查询简介。
  • 这确实是非常基本的。没有冒犯,但如果你不明白这一点,你可能根本不应该写任何 sql,回到绘图板。
  • @RPM1984:没有冒犯,但如果你不想回答问题,你可能根本不应该在 StackOverflow 上。提出这样一个基本问题并没有错,正如在世最伟大的 SQList 回答的事实所证明的那样。
  • 我确实喜欢回答问题。我要说的是……啊算了。我撤回我的评论。
  • 好吧,没有冒犯,但如果你在 3 个项目中工作,,连续 3 天没有睡觉,我认为小事是最难的事情,但是任何事情非常感谢:)

标签: c# .net sql sql-server-2005


【解决方案1】:
SELECT  *
FROM    t1
JOIN    t2
ON      t2.id = t1.t2_id
JOIN    t3
ON      t3.id = t1.t3_id
JOIN    t4
ON      t4.id = t1.t4_id

【讨论】:

  • 此外,这只会显示实际具有 t2_id、t3_id 和 t4_id 值的项目。如果要显示 t1 中的记录,即使 t2_id 为空,也请执行 LEFT OUTER JOIN,而不是 JOIN。
【解决方案2】:
SELECT t1.Field1, t2.Field2, t3.Field3, t4.Field4
FROM Table t1
    INNER JOIN Table2 t2 ON t1.ID = t2.ID
    INNER JOIN Table3 t3 ON t1.ID = t3.ID
    INNER JOIN Table4 t4 ON t1.ID = t4.ID

如果表 2 - 4 中并不总是有匹配的行,并且您希望这些记录仍然返回,则将 INNER JOIN 更改为 LEFT JOIN

【讨论】:

    【解决方案3】:
    SELECT * FROM ParentTable as pt
    LEFT JOIN table1 as t1
    ON pt.t1_ID = t1.ID
    LEFT JOIN table2 as t2
    ON pt.t2_ID= t2.ID
    LEFT JOIN table3 as t3
    ON pt.t3_ID= t3.ID
    

    即使表 1、2 或 3 中没有匹配项,这也会返回一条记录。@Ada 和 @Q 将排除这些记录。

    【讨论】:

      【解决方案4】:

      从 TBL1 T1 中选择 * 右连接 TBL2 T2 ON T1.id = T2.id RGIHT 加入 TBL3 T3 ON T3.id = T2.id

      这将返回右表中的所有记录和左表中的匹配记录。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-18
        • 1970-01-01
        • 2012-03-15
        • 2011-12-16
        • 1970-01-01
        • 2013-10-10
        • 2015-01-03
        • 1970-01-01
        相关资源
        最近更新 更多