Php / SQLite,使用从查询中获取的JOIN参数?

时间:2014-12-09 13:27:41

标签: php sqlite join pdo

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

我有3个表, tableA - tableB TableC

TABLEA

TYPE 表示其他表的名称

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

tableB的

____________________________
|   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

感谢

1 个答案:

答案 0 :(得分: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

如果没有错误' tableB / 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