我有以下两个表:
foo:
ID NUMBER(38) DATA VARCHAR2(10)
酒吧:
ID NUMBER(38) FOO_ID NUMBER(38) DATA VARCHAR2(10)
当使用PDO发出以下查询:
PDO
SELECT * FROM foo f INNER JOIN bar b ON (f.id = b.foo_id)
有没有办法以某种自动别名格式(例如“ FOO.ID”,“ FOO.DATA”,“ BAR.ID”等)从联接中取回 所有 列,所以我不是否需要为查询中的每一列指定和别名?
我已经阅读了有关各种访存模式的所有文档,并尝试了大多数标志/选项,但似乎仍然找不到我想要的东西。
更新:
使用PDO::FETCH_ASSOC,来自的列foo似乎被来自的列覆盖bar:
PDO::FETCH_ASSOC
foo
bar
array(3) { ["ID"]=> string(1) "1" ["DATA"]=> string(5) "bar 1" ["FOO_ID"]=> string(1) "1" }
使用PDO::FETCH_NUM来自两个,列foo和bar出现,为了,但没有任何的方式来识别哪些列来自哪个表,通过了解在每个表和这些列的确切顺序列数除外(容易出错):
PDO::FETCH_NUM
array(5) { [0]=> string(1) "1" [1]=> string(5) "foo 1" [2]=> string(1) "1" [3]=> string(1) "1" [4]=> string(5) "bar 1" }
使用PDO::FETCH_BOTH,我们似乎遇到了PDO::FETCH_ASSOC和PDO::FETCH_NUM合并时遇到的相同问题,并创建了一个非常难以理解的结果集:
PDO::FETCH_BOTH
array(8) { ["ID"]=> string(1) "1" [0]=> string(1) "1" ["DATA"]=> string(5) "bar 1" [1]=> string(5) "foo 1" [2]=> string(1) "1" ["FOO_ID"]=> string(1) "1" [3]=> string(1) "1" [4]=> string(5) "bar 1" }
理想情况下,结果集应类似于以下内容:
array(5) { ["FOO.ID"]=> string(1) "1" ["FOO.DATA"]=> string(5) "foo 1" ["BAR.ID"]=> string(1) "1" ["BAR.FOO_ID"]=> string(1) "1" ["BAR.DATA"]=> string(5) "bar 1" }
幕后似乎没有办法做到这一点。显式别名是唯一的方法。