Запрос из 2 псевдотаблиц, размещенных в той же реальной таблице - PullRequest
1 голос
/ 11 июля 2011

Пусть есть 2 таблицы.Чтобы запросить строки, которые имеют одинаковые идентификаторы, вы должны сделать это:

SELECT * FROM Table1 A, Table2 B WHERE A.id = B.id

Теперь позвольте таблицам объединиться в одну глобальную таблицу с добавленным столбцом бывшей таблицы.Итак, запрос

SELECT * FROM Table1

теперь выглядит так:

SELECT * FROM GlobalTable WHERE tableId = 1

Но как должен выглядеть первый запрос сейчас?

1 Ответ

2 голосов
/ 11 июля 2011

Одна таблица должна хранить одну сущность. Не существует такой вещи, как «одна истинная таблица поиска» или «глобальная таблица». Также вы не должны рассматривать EAV. Этот вопрос предполагает, что все ваши таблицы имеют одинаковое расположение ...

Тем не менее, я с нетерпением жду больше повторений позже, когда оно не будет работать должным образом, так что ...

Вы должны использовать явные СОЕДИНЕНИЯ для разделения условий фильтрации и соединения

Select *
from
   GlobalTable A
   JOIN
   GlobalTable B ON A.id = B.id
WHERE
    A.tableId = 1 AND B.tableId = 2

Если вам нужно выполнить OUTER JOIN, вы можете написать это

Select *
from
   (SELECT * FROM GlobalTable WHERE tableId = 1) A
   LEFT JOIN
   (SELECT * FROM GlobalTable WHERE tableId = 2) B ON A.id = B.id

Я бы предложил использовать индексированное представление, чтобы сохранить "tableA" и "tableB" как отдельные объекты, чтобы избежать этой постоянной фильтрации. Или не объединяй их ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...