5

我有以下两个表:

富:

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, 和 的列foobar顺序出现,但无法识别哪些列来自哪些表,除非知道每个表中的列数和这些列的确切顺序(容易出错):

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_ASSOCPDO::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"
}
4

3 回答 3

2

不,你不能,至少你需要这样做:

SELECT f.*, b.* FROM foo f INNER JOIN bar b ON (f.id = b.foo_id)
于 2012-08-30T15:02:59.287 回答
1

在窗帘后面似乎没有办法做到这一点。显式别名是唯一的方法。

于 2012-09-26T21:09:47.520 回答
0

试试这个:

SELECT f.ID as fID, f.DATA as fDATA, b.*, FROM foo f INNER JOIN bar b ON (f.id = b.foo_id)

这个想法是只更改冲突的属性,以便不再有冲突。

于 2015-12-08T18:09:34.593 回答