2012-10-31 13 views
6

Przykład tabela1:Mysql automatycznie dodać przedrostki do pól

id | field1 | field2 
-------------------- 

Table2:

id | id1 | field1 | field2 
-------------------------- 

Czy to możliwe, aby to zrobić:

select t1.*, t2.* from table1 t1 inner join table2 t2 on t1.id = t2.id1 

i otrzymać ten wynik:

t1_id | t1_fiedl1 | t1_field2 | t2_id | t2_id1 | t2_fiedl1 | t2_field2 
---------------------------------------------------------------------- 

Celem jest, aby mysql auto dodać przedrostki do wynikających pól, aby uniknąć długich typowania, takich jak

select t1.id as t1_id, t1.field1 as t1_field1 

i tak dalej

+1

Czy próbowałeś? – hims056

+0

Możesz uzyskać nagłówek, nie jestem pewien co do danych, proszę podać przykładowe dane i wyjaśnić, czego się spodziewasz –

+0

Zawsze poprzedzam moje nazwy pól opisowym trzyliterowym skrótem nazwy tabeli dla wszystkich tabel. –

Odpowiedz

4

Silnik SQL nie będzie przepisać zapytanie "Auto-alias" pola dla ciebie - aliasy muszą być jawne.

Masz jednak dwie opcje w kodzie klienta.

Po pierwsze, można oczywiście napisać abstrakcję, która dzieli zapytanie i zapewnia aliasy.

Po drugie i łatwiejsze, wykorzystuje informacje ujawnione w podstawowych strukturach MYSQL_FIELD powiązanych z każdym zestawem wyników. Zawierają one nazwę pola i tabeli (oraz inne informacje) o każdym polu, co pozwala programować programowo i bez znajomości nazw pól z góry. Sposób wyświetlania tych informacji zależy od konkretnego interfejsu API klienta.

+1

przykładowy kod byłby świetny. – petermeissner

-1
select t1.id as t1_id, t1.fiedl1 as t1_fiedl1 , 
    t1.field2 as t1_field2 ,t2.id as t2_id , 
    ,t2.fiedl1 as t2_fiedl1 ,t2.field2 as t2_field2 
    from table1 t1 left outer join table2 t2 on t1.id = t2.id1 
+0

Punktem pytania jest możliwość wybrania wszystkich pól anonimowo i nadal mają prefiks. –

+0

wypróbuj to zaktualizowane rozwiązanie – jainvikram444

2

Celem jest, aby mysql auto dodawać przedrostki Otrzymany do pola, w celu uniknięcia długich typowania, tak jak

select t1.id as t1_id, t1.field1 as t1_field1 and so on

Jeśli nazwy pól są takie same w obu tabelach, nie będą wyświetlane kolumny z obu tabel.
Musisz napisać nazwy kolumn z określonym aliasem, aby to osiągnąć.

Dla np.

SELECT t1.id t1_id, t1.field1 t1_fiedl1, t1.field2 t1_field2 
     ,t2.id t2_id, t2.id1 t2_id1 ,t2.field1 t2_fiedl1, t2.field2 t2_field2 
FROM table1 t1 
INNER JOIN table2 t2 
     ON t1.id = t2.id1 

See this SQLFiddle Demo

Jeśli nazwa pola po obu tabel są różne, to możesz zrobić, aby osiągnąć pożądany rezultat.

Dla np.

SELECT  t1.*, t2.* 
FROM  table1 t1 
INNER JOIN table2 t2 
     ON t1.id = t2.id1; 

See this SQLFiddle

+1

Wiem o tym. Ale to naprawdę denerwujące, szczególnie gdy operuję 3 i więcej połączeniami na stołach z ponad 20 polami. A co, jeśli mam myśleć o synonimach, powiedzmy, polu 'name', które jest używane w każdej tabeli? Właśnie dlatego pytam. Być może istnieje bardziej elastyczne rozwiązanie. – abr

+0

Silnik zawsze zwraca * wszystkie * pola w rzucie. Interfejsy API klienta, które pobierają wiersze na podstawie domyślnej, niekwalifikowanej nazwy kolumny, nie będą jednak widzieć wielu pól o tej samej "nazwie". SQLFiddle wydaje się korzystać z takiego API, dlatego nie może odróżnić "id" od "id" w zapytaniu, ale wiersz polecenia 'mysql (1)' klient może. – pilcrow

0

Nie, mysql nie przedrostkuje automatycznie kolumn . Jedyne, co możesz zrobić, to ręcznie dodać kolumnę o numerze alias. Jeśli nie chcesz tego zrobić, najlepszym sposobem jest zmiana nazwy kolumn, które tworzą niepowtarzalną nazwę z każdej tabeli.Jeśli nie dodasz alias i są kolumny o tej samej nazwie, tendencja jest taka, że ​​zostanie wyświetlona kolumna z pierwszej tabeli. Jest to normalne ze względu na kolizje nazw między tabelami.

Powiązane problemy