[英]SELECT result with table names for columns
一個簡單的問題:
使用*
時,是否可以獲取MySQL結果,表名在列前面而不是列名?
代替:
column1, column2,
等
我會需要:
table_name.column1, table_name.column2,
等
我的問題是,我連接了多個表togheter,它們具有相同名稱的列(例如, key
),但SELECT
的結果只顯示一個。 在每個連接表中鍵入每一列,比簡單地使用*
以及稍后使用表名獲得結果要多得多。
這有什么解決方案嗎?
謝謝您的幫助。
我發現另一種解決方案實際上按預期工作!
顯然,有可能 - 至少,使用PHP:
$ PDO-> setAttribute(PDO :: ATTR_FETCH_TABLE_NAMES,true);
有了這個,我用完全限定的列名返回結果。 我真的很想知道這在SQL中是怎么看的,但至少它解決了這個問題。
Coulndt之前找到它,感謝@RobinCastlin的進一步鏈接(這讓我得到了解決方案) - 以及其余的幫助!
使用*選擇器是不可能的。 大約4年前就已經在stackoverflow上詢問了這個問題。 您需要鍵入每個列並使用別名。
即使你不喜歡定義所有這些值,也不一定要這么做:
$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 ...
沒有簡單的方法可以做到這一點。
您可以使用動態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 ;
具有相同名稱的列將用於連接,並且不會在結果中復制。
缺點是你應該極其謹慎,沒有任何列(除了用於加入的密鑰)和(你和任何其他開發人員)不要錯誤地添加任何列 - 因為這會破壞查詢,產生不期望的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.