我必须在一个简单的SQLite数据库上使用PHP执行此操作,使用PDO进行此操作
我有 3 张表,表 A - 表 B,表 C
表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,而不必对表表中存在的每一行进行查询A
谢谢
外部连接还会返回未找到匹配项的行:
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