我有以下两个表:
富:
ID NUMBER(38)
DATA VARCHAR2(10)
酒吧:
ID NUMBER(38)
FOO_ID NUMBER(38)
DATA VARCHAR2(10)
用于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
:
array(3) {
["ID"]=>
string(1) "1"
["DATA"]=>
string(5) "bar 1"
["FOO_ID"]=>
string(1) "1"
}
使用PDO::FETCH_NUM
, 和 的列foo
按bar
顺序出现,但无法识别哪些列来自哪些表,除非知道每个表中的列数和这些列的确切顺序(容易出错):
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
结合起来,并创建了一个非常难以理解的结果集:
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"
}