Есть 3 таблицы:
Table1 : id | name | source
Table2 : id | name
General : id | element_id | type
Суть в том, что в General лежат строки в определенной последовательности (последовательность важна), где element_id это id из Table1 или Table2 а type определяет к какой из таблиц относится строка (0 - Table1, 1 - Table2).
Как сделать выборку из таблицы General чтобы на выходе получить нечто подобное?
Или есть более удобный способ хранить данные?
Изначально казалось, что вариант General : id | table1_id | table2_id не подойдет, так как одно из полей всегда будет null.
element_id | name
22 | test
58 | Joe
22 | hello
(здесь element_id = 22 не одна и та же строка,
а одна из них принадлежит Table1, другая Table2
Или есть более удобный способ хранить данные?
Именно так! Таблицы Table1 и Table2 объединить, поле type перенести в эту объединенную таблицу. Останется один простой джойн.
Таблицы:
one_table: id | name | source | type
general : id | element_id
Запрос:
select g.element_id, t.name
from general g
join one_table t on t.id = g.element_id
здесь element_id = 22 не одна и та же строка, а одна из них принадлежит Table1, другая Table2
Если у вас сейчас встречаются одинаковые id в таблицах Table1 и Table2, придется один раз сгенерировать заново при объединении.
Как вариант: select ... from General, Table1, Table2 where (General.element_id=Table1.Id and General.type=1) or (General.element_id=Table2.Id and General.type=2) Возможно, работать будет медленнее. Одинаковые id в Table 1 и 2 лучше б в любом случае убрать, как по мне. Не знаю, что именно у вас за база, так что конкретно не скажу. Структуру вам уже посоветовали. В вашем случае, возможно, стоит так и сделать — хрен с им, с лишним полем source. Если набор полей для разных типов сильно различается, стоит, имхо, сделать таблицу с общим набором и дополнительные для каждого типа. А в качестве поля связи везде использовать id из центральной таблицы.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости