Posso automatizzare il “on” dichiarazione query MySQL?
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
?
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 !!!