Могу ли я автоматизировать заявление «ВКЛ» из запросов MySQL?

dba.stackexchange https://dba.stackexchange.com/questions/2657

  •  16-10-2019
  •  | 
  •  

Вопрос

Фон

В процессе QA/QC я пишу много запросов с несколькими соединениями. Я использую MySQL.

Я хотел бы знать, как (если) я могу упростить операторы соединения, например, установив поля по умолчанию для присоединения.

Мои таблицы названы с множественной формой объекта, который они содержат:

 names
 types
 actions
 surnames
 names_surnames

куда names_surnames это много многообещающего таблица

Основные ключи всегда id И иностранные ключи всегда, например,

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

Мои соединения были бы чем -то вроде

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

Вопрос

Есть ли способ заставить MySQL всегда предполагать, что таблицы будут соединены с on thistables.thattable_id = thattable.id?

Это было полезно?

Решение

Как насчет Создание просмотров Для объединений, которые используются неоднократно?

Например:

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;

Другие советы

Если столбцы были названы одинаковыми в таблицах «Оба», я думаю, вы могли бы использовать NATURAL JOIN. Анкет Хотя это не сработает для вас, ваша последовательность в именованиях все равно должна позволить вам генерировать запросы-или, по крайней мере, положения присоединения-с языком сценариев.

Если таблицы, вовлеченные в акцию соединения, идентично названные поля,
Затем вы можете использовать пункт использования синтаксиса соединения.

Например

Если таблица действий имела action_id в качестве первичного ключа вместо идентификатора
и таблица типов имела type_id в качестве первичного ключа вместо идентификатора

Тогда запрос может быть переписан как

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

Попробуй !!!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top