0

簡単な質問:

を使用する場合、列名だけではなく列の前にテーブル名を付けて、MySQL の結果を取得することは可能*ですか?

それ以外の:

column1, column2,

私は必要になります:

table_name.column1, table_name.column2,

私の問題は、同じ名前 (たとえば、key) の列を持つ複数のテーブルを一緒に結合することですが、結果にはSELECT1 つしか表示されません。*また、結合されたすべてのテーブルのすべての列を入力することは、単純に使用して後で Tablenames を使用して結果を取得するよりもはるかに多くの作業になります。

これに対する解決策はありますか?

助けてくれてありがとう。

4

4 に答える 4

2

実際に期待どおりに機能する別のソリューションを見つけました!

どうやら、それは可能です - 少なくとも、PHP では:

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

これにより、完全修飾された列名で結果が返されます。これがSQLでどのように見えるのか本当に疑問に思っていますが、少なくとも問題は解決しています。

@RobinCastlin のさらなるリンク (解決策にたどり着いた) のおかげで、以前はそれを見つけることができませんでした。

于 2012-07-16T12:23:49.440 に答える
0

*セレクターではできません。これは、 stackoverflowで約 4 年前に既に質問されています。すべての列を入力し、エイリアスを使用する必要があります。

于 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 に答える