我必须在一个简单的SQLite数据库上用PHP执行此操作,使用PDO
我有3个表, tableA - tableB , TableC
列 TYPE 表示其他表的名称
___________________________________
|ID_OBJ | TYPE | PROP_1 | PROP_2 |
-----------------------------------
| 1000 | tableB | 0 | 10 |
| 1001 | tableB | 1 | 10 |
| 1002 | tableC | 1 | 10 |
-----------------------------------
____________________________
| ID | PROPA | PROPB |
----------------------------
| 1000 | ... | .... |
| 1001 | ... | .... |
----------------------------
____________________________
| 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
感谢
答案 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