Несколько таблиц в FROM vs INNER JOIN при использовании внешнего идентификатора [closed]

Я видел несколько ответов на тему «Несколько таблиц в FROM vs INNER JOIN», и все они, кажется, говорят, что нет разницы в производительности, но INNER JOIN более новый, более читаемый и предпочтительный.

Моя проблема в том, что в моем конкретном случае использование INNER JOIN кажется более трудным для чтения.

Вот таблицы, которые я буду использовать позже:

CREATE TABLE [dbo].[Entity]
(
    [EntityId] int CONSTRAINT [PK_EnityId] PRIMARY KEY NOT NULL IDENTITY(1,1)
);
GO;

CREATE TABLE [dbo].[Table1]
(
    [Table1Id] int CONSTRAINT [PK_Table1Id] PRIMARY KEY NOT NULL IDENTITY(1,1),
    [EntityId] int CONSTRAINT [FK_Table1_EntityId] FOREIGN KEY REFERENCES [dbo].[Entity]([EntityId]) NOT NULL,
    [Col1] int,
    [Col2] int
);
GO;

CREATE TABLE [dbo].[Table2]
(
    [Table2Id] int CONSTRAINT [PK_Table2Id] PRIMARY KEY NOT NULL IDENTITY(1,1),
    [EntityId] int CONSTRAINT [FK_Table2_EntityId] FOREIGN KEY REFERENCES [dbo].[Entity]([EntityId]) NOT NULL,
    [Col3] int
);
GO;

CREATE TABLE [dbo].[Table3]
(
    [Table3Id] int CONSTRAINT [PK_Table3Id] PRIMARY KEY NOT NULL IDENTITY(1,1),
    [EntityId] int CONSTRAINT [FK_Table3_EntityId] FOREIGN KEY REFERENCES [dbo].[Entity]([EntityId]) NOT NULL,
    [Col4] int
);

У меня есть хранимая процедура, которая:

  • имеет входной параметр @id (что является EntityId)
  • возвращает одну запись, где поля взяты из разных таблиц

  1. Мой подход с несколькими таблицами в предложении FROM:
CREATE PROCEDURE [dbo].[GetDataFromMultipleTables]
    @id int
AS
    SELECT [dbo].[Table1].[Col1], [dbo].[Table1].[Col2], [dbo].[Table2].[Col3], [dbo].[Table3].[Col4]
    FROM [dbo].[Table1], [dbo].[Table2], [dbo].[Table3]
    WHERE [dbo].[Table1].[EntityId] = @id AND [dbo].[Table2].[EntityId] = @id AND [dbo].[Table3].[EntityId] = @id;
RETURN 0
  1. Подход INNER JOIN №1:
CREATE PROCEDURE [dbo].[GetDataFromMultipleTables]
    @id int
AS
    SELECT [dbo].[Table1].[Col1], [dbo].[Table1].[Col2], [dbo].[Table2].[Col3], [dbo].[Table3].[Col4]
    FROM [dbo].[Table1],
    INNER JOIN [dbo].[Table2] ON [dbo].[Table1].[EntityId] = [dbo].[Table2].[EntityId]
    INNER JOIN [dbo].[Table3] ON [dbo].[Table1].[EntityId] = [EntityId].[Table3].[EntityId]
    WHERE [dbo].[Table1].[EntityId] = @id;
RETURN 0
  1. Подход INNER JOIN # 2:
CREATE PROCEDURE [dbo].[GetDataFromMultipleTables]
    @id int
AS
    SELECT [dbo].[Table1].[Col1], [dbo].[Table1].[Col2], [dbo].[Table2].[Col3], [dbo].[Table3].[Col4]
    FROM [dbo].[Table1],
    INNER JOIN [dbo].[Table2] ON [dbo].[Table2].[EntityId] = @id
    INNER JOIN [dbo].[Table3] ON [dbo].[Table3].[EntityId] = @id
    WHERE [dbo].[Table1].[EntityId] = @id;
RETURN 0

Я удалил подход 4: неверный синтаксис


Мне не нравятся подходы 2 и 3, потому что Table1 так же важно, как Table2 а также Table3, поэтому он не заслуживает другого синтаксиса. Также мне не нравится, что условие для Table1 после JOINs.

Вариант №1 мне больше нравится, потому что все таблицы обрабатываются одинаково.

Кроме того, я думаю, что INNER JOIN не следует использовать, как в подходе 3.

В этом конкретном случае:

  • имеет ли смысл реализация с INNER JOIN?
  • лучше ли следовать подходу 1?
  • Есть ли какие-то другие варианты или подходы, которые мне не хватает, и я должен их рассмотреть?

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *