SELECT结果与列的表名称

时间:2012-07-16 11:50:31

标签: mysql select join

一个简单的问题:

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

而不是:

column1, column2,

我需要:

table_name.column1, table_name.column2,

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

有没有解决方案?

感谢您的帮助。

4 个答案:

答案 0 :(得分:2)

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

显然,至少可以使用PHP:

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

有了这个,我用完全限定的列名返回结果。 我真的很想知道这在SQL中是怎么看的,但至少它解决了这个问题。

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

答案 1 :(得分:0)

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

答案 2 :(得分: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 ...

答案 3 :(得分:0)

没有简单的方法可以解决这个问题。

您可以使用Dynamic 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 ;

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

缺点是你应该极其谨慎地没有任何列(除了用于加入的键)和(你和任何其他开发者)不要错误地添加任何列 - 因为这会破坏查询,产生不期望结果