Domanda

Sfondo

Nel processo di QA / QC, sto scrivendo un sacco di domande con più join. Sto usando MySQL.

Vorrei sapere come (se) posso semplificare unirsi a dichiarazioni, per esempio impostando campi predefiniti di aderire su.

I miei tavoli sono chiamati con una forma plurale dell'oggetto che essi contengono:

 names
 types
 actions
 surnames
 names_surnames

dove names_surnames è una relazione molti-molti tabella di ricerca

le chiavi primarie sono sempre id e le chiavi esterne sono sempre, per es.

 names.type_id
 names.action_id
 names_surnames.name_id
 names_surnames.surname_id

Il mio collega sarebbe qualcosa di simile

select names.col1 
from names join types on names.type_id = type.id
           join actions on names.action_id = actions.id;

Domanda

C'è un modo per ottenere MySQL per sempre supporre che le tabelle si uniranno con on thistables.thattable_id = thattable.id?

È stato utile?

Soluzione

Come su vista creando per join che sono utilizzato più volte?

Ad esempio:

create view my_view as 
select names.id as name_id, names.type_id, names.action_id, ...
from names join types on names.type_id = type.id
           join actions on names.action_id = actions.id;

Altri suggerimenti

Se le colonne sono stati nominati gli stessi in entrambe le "tavole", penso che si potrebbe usare NATURAL JOIN. Anche se questo non funziona per voi, la vostra coerenza nella denominazione dovrebbe essere ancora consente di generare query - o almeno la uniscono clausole - con un linguaggio di scripting

.

Se le tabelle coinvolte nel join condividono lo stesso nome campi,
quindi è possibile utilizzare la clausola UTILIZZO del join sintassi .

Ad esempio

Se la tabella di azioni aveva action_id come chiave primaria, invece di id
e il tavolo tipi aveva type_id come chiave primaria, invece di id

interrogazione potrebbe essere riscritta come

select names.col1 
from names join types USING (type_id)
           join actions USING (action_id);

fare un tentativo !!!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top