0

一个快速的问题:

使用时是否可以获得 MySQL 结果,表名在列前面,而不仅仅是列名*

代替:

column1, column2,ETC

我会需要:

table_name.column1, table_name.column2,ETC

我的问题是,我将多个表连接在一起,这些表具有相同名称的列(例如,key),但结果SELECT只会显示一个。并且在每个连接表中键入每一列,这比简单地使用*并稍后使用 Tablenames 获得结果要多得多。

有什么解决办法吗?

谢谢您的帮助。

4

4 回答 4

2

我找到了另一个实际按预期工作的解决方案!

显然,这是可能的 - 至少对于 PHP:

$PDO->setAttribute(PDO::ATTR_FETCH_TABLE_NAMES, true);

有了这个,我得到了完全限定的列名的结果。我真的很想知道这在 SQL 中的样子,但至少它解决了这个问题。

之前找不到它,感谢@RobinCastlin 提供了进一步的链接(这让我找到了解决方案) - 以及其他人的帮助!

于 2012-07-16T12:23:49.440 回答
0

使用 * 选择器是不可能的。大约 4 年前在stackoverflow上已经有人问过这个问题。您将需要键入每一列并使用别名。

于 2012-07-16T11:54:39.780 回答
0

即使您不喜欢定义所有这些值,也不一定很难做到:

$arr_keys = array('table_name' => array('column1', 'column2', 'column3'),
                  'table_name2' => array('column1', 'column2', 'column3'));

$arr_values = array();
foreach(array_keys($arr_keys) as $h)
    foreach($arr_keys[$h] as $h2)
        $arr_values[] = "{$h}.{$h2} AS '{$h}.{$h2}'";

$str_values = implode(', ', $arr_values);
# Insert $str_values after your SELECT ...
于 2012-07-16T12:02:34.730 回答
0

没有简单的方法可以得到这个。

您可以使用动态 SQL(或 PHP)来创建这种类型的查询:

SELECT
    table_name.column1 AS `table_name.column1`,
    table_name.column2 AS `table_name.column1`,
...

但这值得麻烦吗?


另一种解决方案,仅当您的表在列中没有通用名称时才有效,除了用于连接的键列之外,将使用NATURAL JOIN

SELECT
    table_a.a_id
    table_a.column1, 
    table_a.b_id, 
    table_b.b_column2
    table_b.b_column3
    table_b.b_column4
FROM
    table_a JOIN table_b
              ON table_b . b_id = table_a . b_id ;

会成为:

SELECT
    *
FROM
    table_a NATURAL JOIN table_b ;

具有相同名称的列将用于连接,并且不会在结果中复制。

缺点是您应该格外小心,不要有任何列(除了加入时使用的键)和(您和任何其他开发人员)不要错误地添加任何列 - 因为这会破坏查询,产生意想不到的结果。

于 2012-07-16T12:18:09.730 回答