【问题标题】:Php/SQLite , use a parameter for the JOIN taken from a query?Php/SQLite ,使用从查询中获取的 JOIN 参数?
【发布时间】:2014-12-09 13:27:41
【问题描述】:

我必须在一个简单的 SQLite 数据库上使用 PHP 执行此操作,使用 PDO

我有 3 个表,tableA - tableBTableC

表A

TYPE列代表其他表的名称

___________________________________
|ID_OBJ |  TYPE  | PROP_1 | PROP_2 |
-----------------------------------
| 1000  | tableB |    0   |  10    |
| 1001  | tableB |    1   |  10    |
| 1002  | tableC |    1   |  10    |
-----------------------------------

表B

____________________________
|   ID  |  PROPA   | PROPB  |
----------------------------
| 1000  |  ...     |  ....  |
| 1001  |  ...     |  ....  |
----------------------------

表C

____________________________
|   ID  | PROPAA   | PROPBB |
----------------------------
| 1002  |  ...     |  ....  |
----------------------------

我想知道的是:我可以通过 JOIN(例如 LEFT JOIN)执行返回类似内容的查询吗?

_______________________________________________________________________
|ID_OBJ |  TYPE  | PROP_1 | PROP_2 | PROPA   | PROPB | PROPAA   | PROPBB|
-----------------------------------------------------------------------
| 1000  | tableB |    0   |  10    |   ...   |   ... |          |       |
| 1001  | tableB |    1   |  10    |   ...   |   ... |          |       |
| 1002  | tableC |    1   |  10    |         |       |  ...     |  ...  |
-------------------------------------------------------------------------

我不知道如何执行此操作,必须获取要从表中执行联接的表的名称。所以让我知道我是否可以运行 JOIN,而不必对表 tableA

中存在的每一行进行查询

谢谢

【问题讨论】:

    标签: php sqlite join pdo


    【解决方案1】:

    outer join 还返回未找到匹配项的行:

    SELECT tableA.ID_OBJ,
           tableA.TYPE,
           tableA.PROP_1,
           tableA.PROP_2,
           tableB.PROPA,
           tableB.PROPB,
           tableC.PROPAA,
           tableC.PROPBB
    FROM tableA
    LEFT JOIN tableB ON tableA.TYPE = 'tableB' AND tableA.ID_OBJ = tableB.ID
    LEFT JOIN tableC ON tableA.TYPE = 'tableC' AND tableA.ID_OBJ = tableC.ID
    

    如果表 B/C 中没有“错误”行,则无需检查类型:

    SELECT tableA.ID_OBJ,
           tableA.TYPE,
           tableA.PROP_1,
           tableA.PROP_2,
           tableB.PROPA,
           tableB.PROPB,
           tableC.PROPAA,
           tableC.PROPBB
    FROM tableA
    LEFT JOIN tableB ON tableA.ID_OBJ = tableB.ID
    LEFT JOIN tableC ON tableA.ID_OBJ = tableC.ID
    

    【讨论】:

      猜你喜欢
      • 2012-10-17
      • 2011-09-08
      • 2021-03-28
      • 1970-01-01
      • 2017-01-31
      • 2020-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多